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 分析内存分布情况,定位内存泄漏等问题。