jvm优化-步骤
1、监控分析
分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点。
2、生成GC日志
命令:-Xloggc:./gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
在线分析网站:https://gceasy.io/
调整过程:根据GC日志分析得到分析结果,进行分析和处理
gc日志说明:
打印Gc日志的参数
打印gc详细信息
-XX:+PringGCDetails
带有距离JVM开始运行的时间戳
-XX:+PrintGCTimeStamps
带有日历时间戳
--XX:+PringGCDateStamps
指定gc日志存放文件(不指定则控制台打印)
-Xloggc:
针对高延迟问题调优HotSpot VM时,下面两个命令行选项特别有用,通过它们可以获得应用程序由于执行VM安全操作而阻塞的时间以及两个安全点操作之间应用程序运行的时间。
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime
何谓安全操作:安全操作使JVM进入到一种状态:所有的java应用线程都被阻塞、执行本地代码的线程都被禁止返回VM执行Java代码。安全操作常用于虚拟机需要进行内部操作时,此时所有的Java线程都被显式地置于阻塞状态且不能修改Java堆的情况。
GC日志可视化分析工具GCeasy和GCViewer
3、产生dump文件
JVM启动时增加两个参数:
# 出现OOME时生成堆dump:
-XX:+HeapDumpOnOutOfMemoryError
# 生成堆文件地址:
-XX:HeapDumpPath=/home/hadoop/dump/
4、jmap文件生成
发现程序异常前通过执行指令,直接生成当前JVM的dump文件
jmap -dump:file=文件名.dump [pid]
# 9257是指JVM的进程号
jmap -dump:format=b,file=testmap.dump 9257
*注意事项
第一种方式是一种事后方式,需要等待当前JVM出现问题后才能生成dump文件,实时性不高; 第二种方式在执行时,JVM是暂停服务的,所以对线上的运行会产生影响。所以建议第一种方式。
春有百花秋有月,夏有凉风冬有雪!