线上调试及CPU,内存,IO问题排查
Java 查看线程及堆栈
top -Hp [PID]
: 查看进程中的线程PID及运行情况
ps -Tp [PID]
: 查看进程中的线程的PID及运行情况
printf "0x%x\n" [NUM]
: 打印某个数字的十六进制
jstack [PID] |grep [TID_HEX] -A 30
: 抓取堆栈线程号及其后30行的内容
jstack [PID] >> jstack.log
: 堆栈输出到文件,其中的nid=0x202e 之类的就是线程PID的十六进制
若显示的线程为堆栈为GC线程,说明是GC占用
"GC task thread#2 (ParallelGC)" ......
jstat -gcutil [TID] 1000 100
: 查看gc time等信息jmap -histo:live [PID] | more
: 简单查看对象的大小数目jmap -heap [PID]
: 查看堆内存分配情况
排查IO负载问题
iostat -x 1 10 # 每秒1次,输出10次磁盘IO负载使用情况;
pidstat -d 1 10 # 每秒1次,输入10次使用过IO的进程统计
PID:进程id
kB_rd/s:每秒从磁盘读取的KB
kB_wr/s:每秒写入磁盘KB
kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
COMMAND:task的命令名
调试OOM故障:
- 提前设置JVM参数导出dump文件:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapdumpPath=/path/to/file.hprof
- 运行时导出dump文件:
jmap -dump:format=b,file=/path/to/file.hprof [PID]
调试工具:
IDEA Profile 火焰图,JProfile,Java VisualVM(官方工具),jmap 指令
参考:
java线上应用cpu占用过高排查
JAVA CPU占用过高问题排查(linux)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com
文章标题: 线上调试及CPU,内存,IO问题排查
文章字数: 364
本文作者: Jun
发布时间: 2019-12-31, 19:02:00
最后更新: 2024-10-12, 16:42:40
原始链接: http://yoursite.com/2019/12/31/Java线上调试/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。