Java 性能监控
标签: 博客
整体思路
jvm 运行或崩溃时记录 dump,gc 日志 -> 然后 visual vm ,gc 工具分析 排查问题 -> 后期上实时监控系统,提前预防问题的发生。
jvm 崩溃日志
jvm 崩溃后会落日志,在java -jar 启动时加如下参数可以落日志到指定目录。
-XX:ErrorFile=/logs/crash_err_%p.log
在加这个命令时,只需将命令中的logs目录替换成你的目录即可
oom 落dump 文件
在java -jar 启动时加如下参数 :
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs -jar app.jar
只会落一次dump文件, 后续的oom报错,不再触发落dump 文件,但是如果dump过大,会对宿主机 IO造成一定影响,这个还好。
参数解释:
-XX:+HeapDumpOnOutOfMemoryError : oom时 落dump 文件
-XX:HeapDumpPath=/logs: dump 文件存储路径,和日志放一个目录即可
手动落dump 文件
堆dump
命令:
- jps 获取pid
- jmap -dump:format=b,file=/logs/heap.hprof pid
参考:https://www.baeldung.com/java-heap-dump-capture
线程dump
命令:
- jps 获取pid
- jstack pid > /logs/1.tdump
gc 落日志
在java -jar 启动时加如下参数 :
java -Xloggc:/gclogs/`date +%F_%H-%M-%S`-gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=30M -jar app.jar
核心参数解释:
-Xloggc : /gc日志存储目录/gc日志文件名称格式
-XX:NumberOfGCLogFiles=10 : gc文件总数10,超过将删除老的
-XX:GCLogFileSize=30M : gc文件大小,超过将生产一个新的文件,老的归档。
实时监控-预防
后期可以考虑用 zabbix,open-falcon 监控系统来实时监控,提前知道哪些应用内存高,cpu高了,可以提前排查问题,解决问题,而不是等到程序崩了才介入。