JVM排查问题


CPU占用飙升

1. top 找到CPU占用最大的进程 (shift+c按CPU占用量排序)

2. top -Hp pid 找到进程中CPU占用最大的线程

3. printf '%x' ThreadId 将线程ID转换成十六进制

4. jstack pid|grep 'ThreadId' -C5 -color 打印堆栈信息


查找死锁

1. jps -l

2. jstack -l pid 打印堆栈信息

内存泄漏

1. jmap -head pid 查看内存使用情况



2. jstat -gcutil pid 1000 查看GC情况

3. jmap -histo:live pid|more 查看对象内存占用情况(执行之后,会造成jvm强制执行一次GC,线上谨慎使用

Memory Analyzer Tool (MAT)

1. jmap -dump:format=b,file=/root/dump.hprof pid 导出堆快照文件
 
2. 用MAT进行分析

minor gc、major gc、full gc执行频率,计算时间占比。





其他:

1.1 Jstat 查看堆内存、元数据各部分的使用量,以及加载类的数量。

1.2 Jinfo 用来查看正在运行的java应用程序的扩展参数(JVM中-X标示的参数),甚至支持在运行时修改部分参数。

1.3 Jstack 用于查看线程状态。

1.4 Jmap JVM Memory Map命令用于生成heap dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。

1.5 Jhat (web版本的MAT)配合Jmap导出的dump文件使用。jhat内置http server,用hql语法查看dump文件。

1.6 Jprofier 分析内存分布情况,定位内存泄漏等问题。

发表评论 / Comment

用心评论~