CPU问题排查常用命令

常用命令

1. uptime 显示系统启动时间和平均负载

02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88

2. stress 常用压测命令

cpu密集型压测
stress --cpu 1 --timeout 600

io密集型压测
stress-ng -i 1 --hdd 1 --timeout 600

大量进程压测
stress -c 8 --timeout 600

3. mpstat 查看cpu每核使用变化情况,


# -P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
$ mpstat -P ALL 5
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:30:06     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
13:30:11     all   50.05    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   49.95
13:30:11       0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
13:30:11       1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

4. pidstat 查看哪个进程占用资源高,常用 -w -u -t 参数。

命令详解:https://www.jianshu.com/p/3991c0dba094

# 间隔5秒后输出一组数据
$ pidstat -u 5 1 (每核CPU使用情况)
13:37:07      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
13:37:12        0      2962  100.00    0.00    0.00    0.00  100.00     1  stress

$./pidstat -w 1 1 (查看应用进程上下文切换次数,如果要查看线程上下文切换,需要加参数 -t,-d 查看IO读写情况)
Linux 3.10.0-1160.el7.x86_64 (mysql)    02/27/2022      _x86_64_        (2 CPU)

01:04:56 PM   UID       PID   cswch/s nvcswch/s  Command
01:04:57 PM     0         1      0.98      0.00  systemd
01:04:57 PM     0         9     17.65      0.00  rcu_sched
01:04:57 PM     0        11      0.98      0.00  watchdog/0
01:04:57 PM     0        12      0.98      0.00  watchdog/1
01:04:57 PM     0        14      0.98      0.00  ksoftirqd/1
01:04:57 PM     0        37      0.98      0.00  khugepaged
01:04:57 PM     0       347      0.98      0.00  kworker/0:1H
01:04:57 PM     0      1778      0.98      0.00  kworker/1:1H
01:04:57 PM     0      8980      1.96      0.00  kworker/1:2
01:04:57 PM     0     29566      2.94      0.00  kworker/0:2
01:04:57 PM     0     30382      0.98      0.98  pidstat

5. vmstat 分析内存使用,cpu上下文切换和中断次数


# 每隔5秒输出1组数据
$ vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 7005360  91564 818900    0    0     0     0   25   33  0  0 100  0  0

cs(context switch)是每秒上下文切换的次数。
in(interrupt)则是每秒中断的次数。
r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
b(Blocked)则是处于不可中断睡眠状态的进程数。

6. perf top 分析系统或进程热点函数


$ perf top
Samples: 833  of event 'cpu-clock', Event count (approx.): 97742399
Overhead  Shared Object       Symbol
   7.28%  perf                [.] 0x00000000001f78a4
   4.72%  [kernel]            [k] vsnprintf
   4.32%  [kernel]            [k] module_get_kallsym
   3.65%  [kernel]            [k] _raw_spin_unlock_irqrestore
...

perf record 采集内容生成报告,一般都会加上 -g 参数,开启调用关系的采样
perf report 显示报告内容
perf top -g -p 21515  分析指定的进程ID性能问题

7. pstree 查看进程之间关系

$ pstree | grep stress
        |-docker-containe-+-php-fpm-+-php-fpm---sh---stress
        |         |-3*[php-fpm---sh---stress---stress]

pstree -aps 进程ID  --查看进程关系树

8. sar 分析各方面系统性能


# -n DEV 表示显示网络收发的报告,间隔1秒输出一组数据
$ sar -n DEV 1
15:03:46        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
15:03:47         eth0  12607.00   6304.00    664.86    358.11      0.00      0.00      0.00      0.01
15:03:47      docker0   6302.00  12604.00    270.79    664.66      0.00      0.00      0.00      0.00
15:03:47           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15:03:47    veth9f6bbcd   6302.00  12604.00    356.95    664.66      0.00      0.00      0.00      0.05

常用命令安装##

sysstat工具

github:https://github.com/sysstat/sysstat

9. watch -d cat /proc/softirqs 分析软件中断

根据结果变化内容,主要是看哪个类型的软中断变化较大,再具体分析

sysbench工具

参考阿里云帮助文档:
https://help.aliyun.com/document_detail/53632.html

pstree 命令

yum -y install psmisc

posted on 2022-02-27 13:12  柴米油盐酱醋  阅读(368)  评论(0编辑  收藏  举报

导航