线上服务 CPU 100%
top(整机),vmstat(CPU),free(内存),df(硬盘),iostat (磁盘IO),ifstat(网咯IO)等…
top -c
# 输入大写P,则结果按CPU占用降序排序。
# 输入大写M,结果按内存占用降序排序。
# 按数字 1 则可以显示所有CPU核心的负载情况。
top -d 5 # 每隔 5 秒刷新一次,默认 1 秒
top -p 4360,4358 # 监控指定进程
top -U johndoe # ‘U’为 真实/有效/保存/文件系统用户名。
top -u 500 # ‘u’为有效用户标识
top -bn 1 # 显示所有进程信息,top -n 1 只显示一屏信息,供管道调用
top -M # memory summary in megabytes not kilobytes
top -p 25097 -n 1 -b # -b 避免输出控制字符,管道调用出现乱码
top -bn1 | less # top翻页
# 增强版的 top:htop ,一个更加强大的交互式进程管理器:
# 定位异常线程及具体代码行 - 传统方案
# 首先按进程负载排序找到 axLoad(pid)
top oder by with P: 1040jstack
# 找到相关负载 线程PID
top -Hp 进程PID # 1073
# 将线程PID转换为 16进制,为后面查找 jstack 日志做准备
printf “0x%x\\n”线程PID # 0x431
# 例如: jstack 1040|vim +/0x431 -
jstack 进程PID | vim +/十六进制线程PID -
实战
top -c
# 输入P CPU占用降序排序
top -c -p 6415 # 监控指定进程
# shift + h -> 查找出那个线程消耗的cpu高
top -H -p pid # 显示指定进程的所有线程的资源消耗情况
jstack 14521 # 找一个线程分析
printf "%x\n" 7065 # 将需要的线程ID转化为16进制格式,为后面查找 jstack 日志做准备 ex:7065 -> 8bf8
jstack 6415 | grep -A 10 8bf8 # jstack查找这个线程的信息 ( jstack [进程]| grep -A 10 [线程的16进制] )
jstack -l pid # 拿到进程的线程dump文件。这个命令会打出这个进程的所有线程的运行堆栈
# 查找指定进程占用CPU最高的5条线程
sh show-busy-java-threads -p pid