jvm问题排查工具、命令
- dump生成:jmp -dump:live,format=b,file=/tmp/some.bin PID。其中,加上live表示只dump存活的对象。
- 线程栈信息生成:jstack PID > /tmp/file.txt
- 找出占用CPU最多的线程:
- top找到进程
top - 01:26:03 up 1:05, 1 user, load average: 0.38, 0.61, 0.61 # 服务器时间|启动时长|用户数|1分钟5分钟15分钟服务器平均负载(1表示1CPU,如果是4核CPU,则1CPU表示使用了25%的CPU) Tasks: 288 total, 1 running, 287 sleeping, 0 stopped, 0 zombie # %Cpu(s): 5.0 us, 1.0 sy, 0.0 ni, 93.8 id, 0.1 wa, 0.0 hi, 0.2 si, 0.0 st KiB Mem : 8091012 total, 1031712 free, 3134936 used, 3924364 buff/cache KiB Swap: 8389628 total, 8389628 free, 0 used. 4016700 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8877 root 20 0 2729732 375792 86908 S 33.6 4.6 12:56.39 plugin-con+
- top -p PID -h 找到占用CPU最多的线程号(此命令结果显示为PID,对应jstack里的nid)
- 获取jstack;
- 将上面找到的线id转为十六进制形式,通过grep命令可以从jstack里找到相应的线程信息(
echo "obase=16:1567" | bc
进行数字转16进制,这个例子是把1567转为十六进制) - grep 'nid' -B 10 -A 10 jstack.txt (使用grep获取前后10行信息)
- MAT使用:
- Shallow Heap:对象本身占用的空间
- Retained Heap:对象本身及它引用依赖的所有对象占用的空间
- gc日志相关参数:
其中%p为进程ID,%t为时间,示例:gc_pid10442_2019-10-13_18-53-41_.log-Xms30m -Xmx30m -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -Xloggc:/tmp/gc_%p_%t_.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/
- -Xss理解
个线程都有自己的Stack Space(堆栈)。这个Stack Space不是来自Heap的分配。所以Stack Space的大小不会受到-Xmx和-Xms的影响,这2个JVM参数仅仅是影响Heap的大小。Stack Space用来做方法的递归调用时压入Stack Frame(栈帧)。所以当递归调用太深的时候,就有可能耗尽Stack Space,爆出StackOverflow的错误。
-Xss256k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆 栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误.
JVM可创建的最大线程数限制因素:线程堆栈大小->进程的最大内存->操作系统位数。
jdk7的xss最小设置允许值为228k,否则jvm启动报错:The stack size specified is too small, Specify at least 228k - 其他几个top
htop 另一个类似top,功能更强大。快捷键T可以看进程的树形结构
iotop 看io(需要管理员权限)
iftop 看网卡(需要管理员权限)
参考文档:
本博客(liqipeng)除非已明确说明转载,否则皆为liqipeng原创或者整理,转载请保留此链接:https://www.cnblogs.com/liqipeng/p/11669137.html。
本博客(liqipeng)除非已明确说明转载,否则皆为liqipeng原创或者整理,转载请保留此链接:https://www.cnblogs.com/liqipeng/p/11669137.html。
如果你觉得这篇文章对你有帮助或者使你有所启发,请点击右下角的推荐按钮,谢谢,:)