技术交流28群

服务热线

135-6963-3175

微信服务号

jvm调优之何时进行调优和目标、工具 更新时间 2022-3-5 浏览1301次

对哪些指标进行判断呢?

吞吐量、响应时间、内存占用。

何时需要进行jvm调优呢?

  1. 当系统吞吐量于相应性能不高或下降

  2. heap内存(老年代)持续上涨达到设置的最大内存值

  3. Full Gc次数频繁

  4. Gc停顿时间过长(超过1秒)

  5. 应用出现OutOfMemory等内存异常

  6. 应用中有使用本地缓存且占用大量内存空间

调优目标:

  1. 堆内存使用率<=70%

  2. 老年代内存使用率<=70%

  3. avgpause<=1秒

  4. 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。当然在线上分析时候也可把被分析的节点摘下来,若提供的高可用环境的情况下。