JVM 模型
java虚拟机体系结构
JVM内存模型
JVM 调优常用小工具
jps -l
jstat ‒[ gc | gcutil | gccause] pid interval(ms) num
S0、S1对应From、To空间;之后是Eden、Old、Perm;在后面对应YGC次数、YGCT用时等。
- jmap ‒heap pid
java opts基本参数设置
- gc优化目标:一是减少stop the world时间(所有的回收都会有,不是只有fullgc),二是减少服务器资源使用。
最终建议的设置
java -server -Xmx2gm -Xms2g -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:PermSize=64m -XX:MaxPermSize=96m -XX:-DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+UseParNewGC -XX:ParallelGCThreads=20 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=
$
CATALINA_BASE/logs/java_pid.hprof -Dqunar.logs=$
CATALINA_BASE/logs -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:$
CATALINA_BASE/logs/gc.log-server:作为第一个参数,在多个CPU时性能佳
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一 ,Sun官方推荐配置为整个堆的3/8;-XX:NewRatio=2 建议显示设置为2。两者任选一个即可。
-XX:SurvivorRatio=8 建议显示设置为8
-XX:PermSize:Size of the Permanent Generation. [5.0 and newer: 64 bit VMs are scaled 30% larger; 1.4 amd64: 96m; 1.3.1 -client: 32m.]
-XX:-DisableExplicitGC:保持默认。详细可参考HotSpot VMJVM调优的”标准参数”的各种陷阱
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。
-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片。
-XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+HeapDumpOnOutOfMemoryError:在java.lang.OutOfMemoryError 异常出现时,输出一个dump.core文件,记录当时的堆内存快照。
-XX:HeapDumpPath=/home/jack/java_pid.hprof 堆内存快照的存储文件路径。
-Xloggc:输出GC 详细日志信息至指定文件。
JVM调优参考
垃圾收集器简介
你在一起
ggjucheng点点滴滴,尽在文中
hengyunabc的专栏
新生代和老年代怎样的比例比较合适呢
讨论HotSpot VM JVM调优的”标准参数”的各种陷阱
JVM不稳定参数
sun 官网文档
深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)下载地址