1.查看 cpu load
命令
方式1:uptime
方式2:top
然后查看第一行
uptime:
top:
怎么看
平均利用率 = load / cpu核心数。大于 70%,说明亚健康。
- 如果是 4 核,最近一段时间内:
- cpu一直不停歇运行 2 个任务(进程),则 cpu load 为 2(基本算是空闲一半)
- cpu一直不停歇运行 4 个任务(进程),则 cpu load 为 4(基本算是打满)
- 如果是 1 核,最近一段时间内:
- cpu一直不停歇运行 1 个任务(进程),则 cpu load 为 1(基本算是打满)
- cpu一直不停歇运行 4 个任务(进程),则 cpu load 为 4 (严重打满,超负荷300%)
注意 io 也算 load
load 高不一定是 cpu 打满,可能是 io 密集型任务也会计算到 load 中。
可以查看当前等待 io 的情况,使用 iostat
或者 top
查看 iowait 的 cpu 时间占比
确切的说,cpu load 是不可中断任务,包括:
- 正在占用 cpu 时间片的进程
- 正处于等待 io 读写的进程(io 专用处理器在执行这些任务,业务进程/线程会等待 io 读写,实际上是阻塞式系统调用导致的等待)
2.找出占用 cpu 高的进程
命令
方式1:top
手工看
方式2:pidstat
3.找出占用 cpu 高的线程
命令
步骤 1:top
找出 cpu 最高的进程
步骤 2:top -H -p 进程id
,找出该进程中占用 cpu 最高的线程id
步骤 3:printf '%x' 线程id
将十进制的线程id,转为16进制数x
步骤 4:jstack 进程id | grep 上一步计算的16进制线程id值x
,查看x线程在做什么
解析
top -Hp 进程id
会实时罗列该进程下的所有线程,按下大写P
对结果排序:
[root@localhost ~]# top -H -p 25713
top - 23:49:25 up 19:58, 5 users, load average: 0.99, 0.59, 0.28
Threads: 12 total, 1 running, 11 sleeping, 0 stopped, 0 zombie
%Cpu(s): 50.0 us, 0.0 sy, 0.0 ni, 50.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2044256 total, 916964 free, 311600 used, 815692 buff/cache
KiB Swap: 2097148 total, 2078460 free, 18688 used. 1687948 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25714 root 20 0 2726752 27736 11100 R 99.9 1.4 4:19.37 java
25713 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25715 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25716 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25717 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25718 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25719 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25720 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25721 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25722 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25723 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.00 java
25724 root 20 0 2726752 27736 11100 S 0.0 1.4 0:00.09 java
4.查看当前各个 cpu 运行状态
命令
mpstat -P ALL 3
mpstat -P ALL
:查看全部 cpu 状况,结果的第一行是汇总
3
:每个三秒采集一次
作用
查看所有cpu运行状态,3秒刷新一次