• 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
    
  • 相关阅读:
    过滤评论中的表情
    谈谈你对多进程,多线程,以及协程的理解
    什么是多线程竞争?
    解释以下什么是锁,有哪几种锁?
    .什么是死锁
    多线程交互访问数据,如果访问到了就不访问了?
    什么是线程安全,什么是互斥锁
    说说下面几个概念:同步,异步,阻塞,非阻塞?
    什么是僵尸进程和孤儿进程?怎么避免僵尸进程?
    python中进程与线程的使用场景
  • 原文地址:https://www.cnblogs.com/nanxiang/p/15939487.html
Copyright © 2020-2023  润新知