线上CPU飙升100%问题排查, 排查IO使用过高的进程, 查看tcp状态 Linux教程


线上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的值

签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回