jvm 参数优化---笔记

2010-10-27

 

写此文章,主要是前段时间弄了好几回tomcat优化,系统稳定运行3个月了。今天看了下内存状态很健康,服务也没自动重启过,研究+探索+实践得出来的优化参数,当然并不一定完美,要根据应用具体情况而定。tomcat 默认参数catalina.sh重可加入如下参数来优化jvm内存回收:先把参数设置摆出来:


JAVA_OPTS=”-server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=128M -XX:MaxPermSize=128m -XX:NewSize=512m -XX:MaxNewSize=512m  -XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:+UseAdaptiveSizePolicy”

 

详解:

首先,我的应用场景是:如果不优化,应用可能存在如下问题:运行一段时间后tomcat会莫名其妙重启或crash,其它内部性能问题。

然后这个jvm参数有何帮助呢?


从前人的各类文章上了解到jvm的垃圾回收机制,这里只是简单提一下, jvm的内存分为2大类型,一个是perm型,另一个是generation型。perm区域存放的是class这些静态信息,一般默认64m,如果你的项目很大,有可能一启动就报错,out of memory permsize什么的,另外如果用spring框架的话很多类是动态反射加载的,运行一段时间有可能出现此异常,这种情况,设置下permsize就可以了

 

另外一个类型才是重点,应用的代码基本上在这个区域活动,new的类都会在这个区域,而且jvm决大部分工作都在这里搞了,这个区详细说很复杂,有空去看sun资料,这里也只大概提下:

 

        这个区包含新生代和老生代区域,所有new出来的会放置在新区域,而多次回收失败的一些一直被使用的实例则被转移到老生代区域,所以新生代区域活动是最频繁的。新生代内存不足时会促发一次 这个区的gc ----然后再到老生代的gc---最后才轮到full gc。full gc代价很高,应该尽量避免,尽量在newsize参数的这个区gc,一般配置 newsize分配到总内存1/4左右,---最终,如果full gc 还是内存不足,那就会引发out of memory ``` 常见的那种。

 

-xms xmx jvm占用最小和最大物理内存
-Xmn512m 就是xms newsize 和 maxnewsize 直都一样,当然我那参数有点重复 -Xmn512m  -XX:NewSize=512m -XX:MaxNewSize=512m 背后2个可以去掉的``` 项目用上去稳定了一直没调整。也无大碍。 为什么最小和最大要配置同一直,省区jvm动态申请内存的损耗,其他参数也同理。

 

-XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:+UseAdaptiveSizePolicy
这几个参数,一般的应用没什么必要,UseParallelGC 并行回收,XX:ParallelGCThreads 并行回收线程数,只有配置了UseParallelGC有效。UseAdaptiveSizePolicy,让jvm根据情况动态适配参数,当然如果你指定了某些参数,jvm就不会对那些参数再去调整的,加这个参数只要是让我们考虑不全的其它参数能让jvm帮忙做微处理。 总之UseParallelGC目的是 加快jvm回收频率 。

 

最后,我的是web应用,目前能支撑到 ip50w一天(单机,只有apache+tomcat简单分流模式集群),如果是实时性更高的,比如做网游的服务器,那还得适当加快jvm回收频率。具体的还得根据应用情况做测试之后来调整了。

 

附上几个相关命令,linux上可用

    jmap -heap 进程号 // 查询heap情况

    ps -ef|grep java // 进程号可通过这个命令查询

   jstat -gcutil -h5 14103 4s 100  //监控gc的回收情况 其中14103 是进程号,这里每4秒检查一下,100次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值