服务热线
135-6963-3175
对哪些指标进行判断呢?
吞吐量、响应时间、内存占用。
何时需要进行jvm调优呢?
当系统吞吐量于相应性能不高或下降
heap内存(老年代)持续上涨达到设置的最大内存值
Full Gc次数频繁
Gc停顿时间过长(超过1秒)
应用出现OutOfMemory等内存异常
应用中有使用本地缓存且占用大量内存空间
调优目标:
堆内存使用率<=70%
老年代内存使用率<=70%
avgpause<=1秒
Full GC次数0或avg pause inerval平均停顿间隔>=24小时
参数建议:
建议调为full gc后老年代的3-4倍
堆内存:参数-Xms和-Xmx,通常设置为相同的值,避免运行时要不断扩展JVM内存,建议扩大至3-4倍 FullGC后的老年代空间占用
年轻代:参数-Xmn,1-1.5倍FullGC之后的老年代空间占用。
老年代:
(1)、响应时间优先:
一般要考虑并发会话率和会话持续时间等一些参数。
如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;
如果堆大了,则需要较⻓的收集时间。
(2)、吞吐量优先
一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放⻓期存活对象。
相关参数:
Xmn堆内存新生代大小
Xms:堆内存初始化大小
Xmx:堆内存最大大小
Xss:栈大小
....
可在启动时候加参数:
#发生fullgc前自动dump
-XX:HeapDumpBeforeFullGC
#发生fullgc后自动dump
-XX:+HeapDumpAfterFullGC
#出现 OOME 时⽣成堆 dump:
-XX:+HeapDumpOnOutOfMemoryError
#⽣成堆⽂件地址:
-XX:HeapDumpPath=/home/hadoop/dump/
(建议)
相关调试工具有哪些呢?
jmap
jmap -dump:file=⽂件名.dump [pid]
暂停服务方式,会导致线上有停顿,并且非常影响性能,极速下降。
也可察看堆栈详细信息(jamp -heap)
堆中对象统计信息(jmap -histo:live pid)
类加载信息(jmap -clstats pid)
jhat
用于离线分析堆栈文件数据,会启动出一个端口,通过浏览器访问,界面不友好,提供OQL查询
jstat
查看堆栈使用情况。
jstat -gc 34784 250 4
34784 是 进程ID ,采样时间间隔为250ms,采样数为4
jconsole
图形ui进行分析
jvisualvm
推荐
mat
推荐
arthas
推荐,完全可线上分析,性能影响不到15。当然在线上分析时候也可把被分析的节点摘下来,若提供的高可用环境的情况下。