一、JVM线上问题排查
案例分析
JVM内存设置越大,FGC耗时越长
CPU 100%问题排查
系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
如果想看线程的jstack,就得把线程号转为16进制再 jstack,前面要加0x。如果想看进程的jstack,直接jstack加上线程号就行,但是他会列出进程下的所有线程
重点关注线程的状态:Waiting
关注这个Waiting on,表明该线程在等待什么
二、怎么找持有这把锁的线程?
搜索jstack dump信息,找,看哪个线程持有这把锁
三、jstack和jmap
jstack
jstack建议看这篇文章,写的非常好
jmap
设置JVM参数,发生OOM的时候会自动导出Dump文件
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof
线上系统,内存特别大,执行jmap指令执行期间会对进程产生很大影响,甚至卡顿,慎用
jmap -histo 进程ID - - - 看内存中的对象
jmap -dump:format=b,file=文件名 [pid] - - - 导出Dump文件
jhat -port 端口 filePath - - - 配合Jmap使用
注意如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存,即
jhat -J-Xmx512m -port 9998 /tmp/dump.dat
四、在线排查
为什么需要在线排查
在线排查强烈推荐阿里的开源神器——Arthas(阿尔萨斯)
之后会出一篇专门讲这个