线上CPU飙升100%问题排查
一.
# 首先按进程负载排序,找到最大%: pid
top:1040
# 进程号命令找到 CPU 消耗最多的线程号(列名仍然为 PID)
top -Hp 1040:
# 命令看最近登录过的ip
last
#检查恶意进程及非法端口
netstat -antp
#定位异常进程,位置
ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的 pid 号)
#查一次kswapd0是否还有文件
find / -name kswapd0
#查看是否有定时任务
cat /etc/passwd | grep 'bash' | cut -f 1 -d : | xargs -I {} crontab -l -u {}
#可疑的定时任务,都清理了
crontab -r -u root
#看下开机启动项是有没可疑启动项
systemctl list-unit-files
二.
htop
yum install perf -y
# 非 Java 应用可使用 perf
perf top -p 7574
# Java应用可通过
---jstack查看输出
jstack -l 17850
---jstack统计线程数
jstack -l 17850 | grep 'java.lang.Thread.State' | wc -l
---将线程堆栈信息输出到当前目录下的 threadDump.log
jstack 17850 > /data/jstack.txt
---查看cpu占用高进程
top
---查看cpu占用高线程
top -H -p 17850
---转换线程ID
printf "%x\n" 17880
45d8
---定位cpu占用线程, 找到 CPU 消耗最多的线程方法堆栈
jstack 17850|grep 45d8 -A 30
三.
1. jps主要用来输出JVM中运行的进程状态信息
jps -m -l
2. jstack主要用来查看某个Java进程内的线程堆栈信息
3. jmap用来查看堆内存使用状况,一般结合jhat使用
-如果运行在64位JVM上,可能需要指定-J-d64命令选项参数。
---打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息,
jmap -permstat pid
---查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况。
jmap -heap pid
---查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
jmap -histo:live pid | more
---jmap把进程内存使用情况dump到文件中,再用jhat分析查看
jmap -dump:format=b,file=/tmp/dump.dat pid
-dump出来的文件可以用MAT、VisualVM等工具查看,这里用jhat查看,
-注意如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存,即
jhat [ -J-Xmx512m ] -port 9998 /tmp/dump.dat
排查IO使用过高的进程
yum -y install iotop
iostat -x 1 10
---%idle小于70% IO压力就较大了,一般读取速度有较多的%wait.
---如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
avg-cpu: %user %nice %system %iowait %steal %idle
5.48 0.00 1.24 10.22 4.28 78.78
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.37 3.00 27.30 5.47 722.00 173.14 54.64 0.78 23.81 9.61 94.70 1.40 4.58
xvdb 0.00 0.00 0.32 0.00 2.19 0.00 13.75 0.00 5.39 5.30 31.00 2.73 0.09
xvdc 1.29 21.12 130.74 13.60 3575.35 175.45 51.97 2.97 20.55 21.01 16.15 4.78 69.03
查看tcp状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 2671
CLOSE_WAIT 10
FIN_WAIT1 41
FIN_WAIT2 2
ESTABLISHED 25
SYN_RECV 28
CLOSING 53
LAST_ACK 15
查看TIME_WAIT的值