文章目录
1、cpu负载相关的工具
[root@ chenc01 ~]# uptime
11:19:34 up 0 min, 2 users, load average: 0.00, 0.00, 0.00
11:19:34 : 当前时间
up 0 min 系统运行时间
2 users: 当前用户登录数
[root@ chenc01 ~]# w
11:20:38 up 1 min, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 11:18 1:52 0.00s 0.00s -bash
root pts/1 10.0.0.1 11:19 0.00s 0.00s 0.00s w
load average: 0.00, 0.00, 0.00 系统负载,也就是任务队列的平均长度。三个数值分别表示 1分钟,5分钟,15分钟前到现在的平均值;
举例:
服务器A DELL R720 load average:1.11, 0.08, 0.01 1核;
服务器B DELL R730 load average: 5.25, 7.22, 60.1 1核;
服务器C DELL R720 load average:10.15, 1011, 10.01 4核;
答案: 服务器B负载过高;
经验: 单核心,1分钟内系统平均负载不超过3. 4核心不要超过12;
从高往低说明负载是下降的;
从低往高的说明负载上升的;
1)问题1.: 找出系统中占用CPU最多的进程;
2)问题2: cpu一直飚高,如何处理;
-
top查找出哪个进程消耗的CPU高(top -c)
-
top -h -p查找出哪个线程消耗的cpu高(top -h -p pid)
这个命令就能显示刚刚找到的进程的所有线程的资源消耗情况。 -
printf%x进行pid的进制转换
找到CPU负载高的线程pid 8627, 把这个数字转换成16进制,21B3(10进制转16进制,用linux命令: printf %x 8627) -
jstack记录进程的堆栈信息
执行jstack -l pid,拿到进程的线程dump文件。这个命令会打出这个进程的所有线程的运行堆栈。 -
找出消耗CPU最高的线程信息
搜索“21B3”,就是搜一下16进制显示的线程id。搜到后,下面的堆栈就是这个线程打出来的。
[root@ chenc01 ~]# top
top - 11:22:13 up 3 min, 2 users, load average: 0.07, 0.02, 0.01
Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1004136k total, 109676k used, 894460k free, 8888k buffers
Swap: 786428k total, 0k used, 786428k free, 26616k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7 root 20 0 0 0 0 S 0.3 0.0 0:00.69 events/0
1 root 20 0 19344 1524 1228 S 0.0 0.2 0:00.64 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
# 按照实际使用cpu,从大到小来排序显示所有进程
[root@ chenc01 ~]# ps -aux --sort -pcpu |more
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1171 1.0 0.1 110356 1152 pts/1 R+ 11:23 0:00 ps -aux --sort -
pcpu
root 1 0.2 0.1 19344 1524 ? Ss 11:18 0:00 /sbin/init
root 7 0.2 0.0 0 0 ? S 11:18 0:00 [events/0]
root 2 0.0 0.0 0 0 ? S 11:18 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 11:18