参数调优
- 入门级别的配置一般是:java -server -Xmx5000m Xms5000m
服务器端的jvm运行程序记得都最好加上 -server 很多默认参数都会根据这个运行模式来优化。这里设置了最大内存和最小内存,一般都是配置成相同的,可以减少内存申请和伸缩带来的性能损耗
2. 加入垃圾回收算法的配置:java -server -Xmx5000m -Xms5000m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
关于垃圾回收的具体算法介绍我这里就不详细描述了,可以参考我以前的文章 我们都有一个常识,就是尽量减少JVM的full gc的次数和时间,因为full gc 会导致整个系统的暂停(stop the world).为此,我们为老年代选择了UseConcMarkSweepGC 选择了并发gc算法,也为新生代选择了多线程的并行gc算法UseParNewGC。
3. 设置新生代的内存大小 java -server -Xmx5000m -Xms5000m -Xmn800m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
Xmn是新生代的内存大小,包括(eden+ 2 survivor space)。这个参数设置直接影响系统的响应速度。在java程序中new一个对象,首先是放在eden区域,eden满了后,触发gc,存活下来的对象被拷贝到survivor区。经过若干次yong gc后,如果依然存活下来,就会进入老年代。新生代设置大了,会导致一次yong gc的时间消耗大,设置小了,又会很快满了,导致yong gc的频率过高。新生代不宜设置过大,因为新生代大了,老年代的内存就小了,老年代内存小,会导致full gc发生的频率变大。Xmn也没有一个确切的算法,根据你自身的业务系统决定的。我在设置的游戏服务器的时候,一般采用模拟大量并发用户的行为,调整Xmn的大小,同时监控gc的时间和频率,选择一个合适的大小。下面我会提到怎么用工具来监控gc。
4. 设置一些额外的高级参数 java -server -Xmx5000m -Xms5000m -Xmn800m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70
使用CMS进行老年代gc,会容易导致一些内存碎片,导致内存利用率降低,为此,加入 UseCMSCompactAtFullCollection 可以保证在full gc时进行内存压缩,减少内存碎片。CMSInitiatingOccupancyFraction=70 表示老年代内存达到70%时触发。这个参数要特别小心,设置得过小会导致full gc没有完成,yong gc的对象迁移过来,导致整个老年代内存都满了
工具
- jstat 用来实时查看gc的状态,
用法:jstat -gcutil 进程号 时间(毫秒)。结果如下:
里面列出每个区间的内存大小,新生代gc的次数和时间,老年代gc的次数和时间。这里都能反映出你的JVM的运行状况
- jmap 用于查看java进程的对象状况
用法:jmap -histo:live 进程id 。可以打印每个类的实例数量,内存大小
用法:jmap -dump:format=b,file=log.bin 进程id 这个命令特别有用,可以将jvm的整个内存镜像拷贝下来,用于分析每个对象占用的内存状况。当你的java进程崩溃了,用这个方法,可以分析出哪些对象是罪魁祸首
- jstack 用于查看java进程id的堆栈信息
用法:jstack 进程id 这个工具对于查看死循环的线程很有效,可以直接找出是哪个线程在哪个方法内死循环了
总结
JVM的参数有很多,大部分我们都不需要去设置和优化。如果你的程序没有问题,就不要去折腾。如果你要优化,一定要有相应的测试流程来支撑。希望能与大家交流多一些JVM方面的优化,尤其是实战方面遇到的问题。我的邮件 ken@iamcoding.com
(转载本站文章请注明作者和出处 ken – www.iamcoding.com ,请勿用于商业用途)
参考资料
- JVM参数 http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
- JVM参数设置、分析 http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
相关推荐
JVM参数调优 及 JAVA相关工具使用
jvm 参数调优实践,有代码可供参考,详细调优比较!
JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化),供大家查阅!!!!!!!!!!!!!!
如何配置jvm参数,并且调优,适合各路开发者,
JAVA应用JVM原理及参数调优深入讲解视频.1 JAVA应用JVM原理及参数调优深入讲解视频.2 JAVA应用JVM原理及参数调优深入讲解视频.3 JAVA应用JVM原理及参数调优深入讲解视频.4 JAVA应用JVM原理及参数调优深入讲解视频.5 ...
jvm参数调优-jvm
JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化).zip
实用:多场景JVM参数调优实战
JVM 参数调优-optimization-jvm
jvm参数调优-jvmSample
JVM参数调优及Java测试代码,通过调整虚拟机各种参数并进行测试和监控得到最优配置
JVM参数调优、垃圾回收算法及原理体系.docx
详细讲述了JVM参数的调优方法和步骤.并描述了GC垃圾回收机制的瓶颈,以及出现内存溢出的原因。
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象...本文主要对java垃圾回收机制以及jvm参数等方面做个综述,也算是自己做开发这几年对这方面的一个总结。
JVM参数参数调优共11页.pdf.zip
jvm工具、参数调优&调试技巧 jvm工具、参数调优&调试技巧
JVM调优 调优参数 调优方法 , 调优手段 等.
java6 JVM 调优参数大全 -XX