JVM内存配置的再次思考
JVM内存配置的再次思考
摘要
最近研究过不少内存分配相关的处理
今天晚上突然感觉还不是非常系统.
还是想能够细致的在学习一下.
希望能够慢慢的拾遗,提高自己
操作系统内存的使用情况
本文主要想思考linux相关的.
暂时不考虑Windows相关的机器配置.
也不考虑混用的情况 仅考虑专用的应用服务器.
Linux 尤其是不带GUI界面的纯CLI界面的服务器.
初始内存使用是挺小的.
但是如果机器上面文件比较多,目录比较复杂.
linux会缓存很多inode和dentry信息到内存中
会导致系统内存的大量使用.
除此之外. 操作系统还会缓存大量最近是用过的文件或者是其他变量
除非是内存遇到压力.一般是不会进行释放.
最简单的清理这部分文件的方法是:
echo 3 > /proc/sys/vm/drop_caches
JVM内存分配的原则
在给操作系统足够辗转腾挪的空间之后尽可能多的给予JVM使用
在给JVM的内存需要分析不同的业务场景再进行内存分配.
JVM内存的设置 主要考虑如下几个方面:
1. 能够分配多少内存给JVM使用
2. 能够分配多少内存给JVM的堆区
3. 堆区里面老年代,青年代的比率.
4. 青年代里面 From区域 to区域 以及伊甸区的比率.
5. 其他区域的内存配置, 比如方法区,元数据区,以及native memory是否需要进行限制.
不同业务需要的JVM配置是不一样的.
1. 如果是经常有大对象出现的环境. 可能要增加青年代. 避免对象过大过早升级到老年代触发GC影响性能
2. 如果对象有很多必须持久化存在的,也就是经理至少15次GC还能够存活的, 需要加大老年代. 避免空间不够,过早出现OOM.
3. 不同架构的元数据区域的类或者是方法的元数据区, 编译方法的codecache可能需要进行定制化分析.
关于堆区占比的分析
通过nmt的跟踪发现.
在默认情况下一个线程占用大于 1MB的内存, 如下面所示.
Thread (reserved=242MB, committed=242MB)
(thread #241)
(stack: reserved=241MB, committed=241MB)
(malloc=1MB #1210)
所以这时候要考虑线程数量与内存大小的情况
如果内存过小. 不建议堆区占用太多, 至少要留给操作系统1-2G的内存进行文件缓存等
留给进程数*1MB的用于堆栈区域.
codecache 一般默认值是 256m
GC进程也需要单独的内存进行存放信息. 一般也是需要跟不小的空间
类的元数据区跟程序的复杂度密切相关, 复杂的可能会有上G的空间占用.
如果是虚拟机或者是物理机, 感觉排除堆区, 至少留给3.5G左右的空间.
如果是容器化, 可以减少 1.5G 预留2G左右的空间给非堆区.
容器或者是虚拟机在限制之外的部分可以留给堆区使用.
注意这里考虑比较复杂的应用, 如果应用比较小巧,可以稍留.
如果应用非常复杂, 建议要增加预留. 避免被系统OOM.
关于MaxRamPercentage
如果容器限制内存是4G左右,系统又比较复杂, 这种情况不建议设置太高的比率
避免超过容器的限制,导致被kill
如果容器的限制内存到了16G或者是更高, 这种情况下. 可以设置为 70%左右的内存给堆区.
如果容器的限制内存超过了32G等, 可以超过 75%的比率给容器使用.
如果更高的内存限制, 可以增加更搞一点的比率. 来最大化性能使用.
关于堆区大小与性能
性能主要是考虑TPS以及RT
工作线程数/RT=TPS
所以折中情况下. RT是比较关键的.
如果GC时间较久导致RT时间变成性能衰退.
所以如果设置较大值的内存,会降低GC的次数, 但是可能会导致GC时间的增长
所以选择一个合适的设置和GC算法是很关键的.
比如G1GC 可以设置 停顿时间来保证响应.
综上 其实没有银弹可以解决所有问题 需要不断的学习与时间反馈来提高配置.
JVM内存配置的再次思考的更多相关文章
- JBOSS最大连接数配置和jvm内存配置
一.调整JBOSS最大连接数. 配置deploy/jboss-web.deployer/server.xml文件 . <Connector port="80 ...
- jvm内存配置参数
请看下面题目: 对于jvm内存配置参数: -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3 其最小内存值和Survior区总大小分别是: a. 51 ...
- JVM内存配置参数-XMX,-XMS,-XMN的例子
转载:http://www.nowcoder.com/questionTerminal/093bfa948d144ce3b0a68b938ae8b4ec 对于JVM内存配置参数: -Xmx10240m ...
- JVM内存配置详解
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...
- JVM内存配置详解(转)
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...
- JVM内存配置
JVM内存主要分为两个部分,分别是PermanentSapce和HeapSpace. PermantSpace主要负责存放加载的Class类级对象如class本身,method,field等反射对象, ...
- JVM内存管理的一些思考
目录 一. 内存是怎么分配的 二. 方法区 三. java对象的生命周期 四. Class对象是在方法区还是堆中 五.java对象的大小 六. 类加载的初始化阶段 七.Class.forName和Cl ...
- tomcat JVM内存 配置
原文:http://elf8848.iteye.com/blog/467460 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java ...
- 一定要记住的14个JVM内存配置参数
jvm setting的参数确实比较多(Oracle官网Java HotSpot VM Options),但是作为一名java开发者,那几个最常用最基本的参数设置和意义一定要死记和理解.这里推荐一个网 ...
- Docker——Tomcat JVM 内存配置
前言 安装再docker中的tomcat,在下载大文件或者某些情况下,会出现tomcat的内存溢出等情况,所以需要配置tomcat的内存大小,docker中的tomcat内存大小配置有四种方式. 一. ...
随机推荐
- MySQL进阶篇:详解存储引擎MyISAM
MySQL进阶篇:第一章_一.三_存储引擎特点_MyISAM 1.1 存储引擎特点 1.1.2 MyISAM 1). 介绍 MyISAM是MySQL早期的默认存储引擎.. 2). 特点 不支持事务,不 ...
- 【云享·人物】华为云AI高级专家白小龙:AI如何释放应用生产力,向AI工程化前行?
摘要:AI技术发展,正由应用落地阶段向效率化生产阶段演进,AI工程化能力将会不断深入业务,释放企业生产力. 本文分享自华为云社区<[云享·人物]华为云AI高级专家白小龙:AI如何释放应用生产力, ...
- 轻松带你学习java-agent
摘要:java-agent是应用于java的trace工具,核心是对JVMTI(JVM Tool Interface)的调用. 本文分享自华为云社区<Java动态trace技术:java-age ...
- 多领域应用落地,火山引擎ByteHouse加速云数仓升级
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台VeDI直播活动「超话数据」在线举办,来自火山引擎的产品及解决方案专家分享了以ByteH ...
- Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
配置 Nginx 可以把.conf 文件拉到本地,配置好再传上去 #gzip on; upstream cluster{ server 192.168.0.113:8848; server 192.1 ...
- No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc ...
- 数据存入已有Excel
import openpyxl filepath = r'.\UCB2Create_course\SuccsessCourse.xlsx' wb = openpyxl.load_workbook(fi ...
- 神经网络优化篇:详解动量梯度下降法(Gradient descent with Momentum)
动量梯度下降法 还有一种算法叫做Momentum,或者叫做动量梯度下降法,运行速度几乎总是快于标准的梯度下降算法,简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新的权重. 例如,如果 ...
- 一文聊透 IP 地址的那些事
IP 地址,是一个大家都耳熟能详的名词.以生活举例,IP 在互联网中的作用就像是寄件时的收件人地址和寄件人地址,收件人地址让信件可以被正确送达,寄件人地址则让收到信的人可以回信. IP 地址作为每一个 ...
- MIGO生产订单入库写入批次特性增强
一.生产订单入库 MIGO根据生产订单入库时,将生产订单中的字段,写入到批次特性中 二.BADI:MB_MIGO_BADI 调用BADI中的IF_EX_MB_MIGO_BADI~POST_DOCUME ...