线上调试及CPU,内存,IO问题排查

  1. Java 查看线程及堆栈
  2. 排查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故障:

  1. 提前设置JVM参数导出dump文件:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapdumpPath=/path/to/file.hprof
  2. 运行时导出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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏