一次jvm线上排查小记

jvm线上排查

内存泄露

top free df 三连

若 Java 进程,不做大量 CPU 运算,正常情况下,CPU 应该在 100~200% 之间,出现这种 CPU 飙升的情况,要么走到了死循环,要么就是在做大量的 GC。使用 jstat -gc pid [interval] 命令查看了 java 进程的 GC 状态(果然,FULL GC 达到了每秒一次。)

若确定了内存泄漏,使用 jstack pid > jstack.log (保存线程栈的现场);jmap -dump:format=b,file=heap.bin pid 保存了堆现场。(此后重启机器)

jstat:强大的jvm监控工具,一般用法:jstat [-options] pid interval
它支持的查看项有:

  • -class 查看类加载信息
  • -compile 编译统计信息
  • -gc 垃圾回收信息
  • -gcXXX 各区域GC的详细信息 如-gcold

分析栈

grep 'java.lang.Thread.State' jstack.log | wc -l

分析线程状态

grep -A 1 'java.lang.Thread.State' jstack.log | grep -v 'java.lang.Thread.State' | sort | uniq -c |sort -n

分析堆

使用gzip -6~7 对其进行压缩

使用MAT分析jvm heap (将文件后缀改为.hprof),会提示我们要分析的种类,选择memory leak suspect.

你可能感兴趣的:(一次jvm线上排查小记)