CPU不高的情况,一般cpu的wait或idle都有较大的值,表明CPU利用率不高
- 一种情况是磁盘IO过高,导致线程等待
使用vmstat 2 10
命令查看io情况,2 代表每两秒循环一次,10 代表一共循环十次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 2 276352 210208976 5843432 9644700 0 0 310 191 0 0 1 5 91 2 0
0 2 276352 210188960 5851088 9655928 0 0 6550 6728 4646 8589 2 1 87 11 0
1 1 276352 210152272 5856968 9688128 0 0 5454 13656 6310 12566 2 1 85 13 0
1 1 276352 210132256 5861448 9701732 0 0 5694 2320 3966 30963 2 1 87 11 0
1 2 276352 210113440 5863044 9717104 0 0 958 9182 5281 36630 6 2 84 8 0
1 1 276352 210104512 5865136 9723836 0 0 1170 4714 3329 9156 6 1 85 8 0
0 1 276352 210093616 5867820 9730472 0 0 1590 5376 5475 11531 1 1 92 7 0
0 1 276352 210084640 5871020 9735528 0 0 1916 2408 5224 10248 0 1 93 6 0
1 1 276352 210078176 5873920 9739876 0 0 1706 1828 4117 8173 0 0 93 7 0
0 1 276352 210071040 5876172 9744716 0 0 1380 2434 4476 8424 0 0 93 7 0
使用 iotop
命令倒序查看IO的使用情况
Total DISK READ : 35.87 M/s | Total DISK WRITE : 26.05 M/s
Actual DISK READ: 35.87 M/s | Actual DISK WRITE: 380.86 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
11566 idle root 35.87 M/s 25.97 M/s 0.00 % 94.44 % updatedb.mlocate
8547 be/4 mysql 0.00 B/s 0.00 B/s 0.00 % 0.77 % mysqld --daemonize --pid-file=/run/mysql
通过观察iotop发现 updatedb.mlocate 进程占用 io 较多
updatedb 是由 mlocate 定时启动的为硬盘建立文件索引的进程 方便 location
命令的使用的
我们可以在 /etc
下面查找这个文件,我的系统是ubuntu18, 在/etc/cron.daily
发现了这个文件,可以将其删掉或者将其移动到/etc/cron.monthly
改为一月启动一次
2. 另一种情况,运行的线程较多,导致cpu频繁切换
使用 vmstat
命令查看CPU上下文切换次数
使用 pidstat -wt 1
命令查询运行的进程
查询到具体进程之后用 cat /proc/进程号/status
,解析其中的内容判断问题