Echoshell
  • Selfservice book
  • MacBook Setup
  • Linux SystemAdmin
    • Linux useful commands
    • Analyze tools
      • Hardware overview
      • Vmstat
      • Top
      • Sar
      • ltrace
      • strace
      • Netstat/SS
      • lsof
      • iostat
      • iotop
    • Performance Tuning
      • CPU
      • Momory
      • Disk/Storage
      • Network
      • Process
  • SRE vs DevOps
    • Ansible
    • Git
    • Jenkins
    • HashiCorp-Terraform
      • Terraform VS. CloudFormation
      • Main elements
        • Provider
        • State Storage and Locking
        • Backends
      • Basic Elements
        • Install
        • Resource
        • Data
        • Output
        • Locals
      • Commands
        • terraform plan
        • terraform apply
        • terraform import
    • HashiCorp-Vault
    • HashiCorp-Consul
    • CI/CD
      • GoCD
  • Automation/Script Language
    • Shell&Bash
      • Useful links
    • Python
      • 基础
        • py2 vs py3
        • 字符编码
        • 输入和输出
      • 数据类型Data Types
        • 字符串String
        • 列表List
        • 元组Tuple
        • 字典Dict
        • 集合Set
      • 函数Function
        • 定义函数
        • 函数参数
      • 函数式编程
        • 匿名函数lamba
        • map/reduce/filter
        • 闭包
        • 装饰器
      • 类Class
        • 类和实例
        • 继承和多态
        • 类方法和静态方法
        • 定制类和魔法方法
        • 元类-陌生的 metaclass
      • 高级特性
        • 迭代器iterator
        • 生成器generator
        • 上下文管理
      • 文件和目录
        • 读写文本文件
        • os 模块
      • 进程、线程和协程
        • 进程
        • 线程
        • ThreadLocal
        • 协程
      • 异常处理Exception
      • 正则表达式Regular-Expressions
        • re 模块
      • 标准模块
        • datetime
        • argparse
      • 第三方模块Three Parts
        • Click
        • JIRA
        • Email
        • Jenkins
      • 系统相关模块System modules
        • Subprocess
        • shutil
  • Learning notes from organization
  • IT Tech Team Leader/Senior System administrator
    • Helpdesk
    • Windows Servers
      • Radius Server
      • NFS
      • Munki
      • 802.1X
    • Networks
  • Personal views and ideas from my careen path
    • Team management
    • Career path change from IT to devops
Powered by GitBook
On this page
  • Granter CPU info
  • Troubleshooting steps
  • Top
  • Sar
  • Vmstat
  • mpstat - Multiprocessor Statistics

Was this helpful?

  1. Linux SystemAdmin
  2. Performance Tuning

CPU

over all check commands - sar, vmstat, top

Detailed check - mpstat

Points

  • CPU usage - 哪些进程占用CPU

  • CPU过载 - 需求的CPU 大于实际CPU数目

  • CPU 本身故障

Granter CPU info

cat /proc/cpuinfo | grep processor

lscpu

Troubleshooting steps

#top show overall views  and 1 show all cpus status
top  +  1  
# vmstat check r and b 
vmstat 2
# refreah in 2 seconds, check cpus 
sar -u  2
# mpstat check all or each cpu status
mpstat -P ALL 2
mpstat -P 2 2  # check processor 2 status

Top

默认进入top 是按照CPU 排序的

top - 15:20:33 up 7 days, 12:15,  1 user,  load average: 0.01, 0.02, 0.00
Tasks: 107 total,   1 running,  59 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.6 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   933940 total,   132316 free,   107456 used,   694168 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   806876 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
26022 rjin      20   0    9252   3752   3152 R   0.7  0.4   0:00.09 top
    1 root      20   0  161128   8548   6088 S   0.0  0.9   1:05.65 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.87 kthreadd
    4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H
    6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq
    7 root      20   0       0      0      0 S   0.0  0.0   0:00.96 ksoftirqd/0

按下数字“1”,显示所有CPU 状况

top - 15:18:17 up 7 days, 12:13,  1 user,  load average: 0.08, 0.04, 0.00
Tasks: 107 total,   1 running,  59 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   933940 total,   132160 free,   107620 used,   694160 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   806712 avail Mem

shift + p list highest cpu pid

top -Hp pid # -H threads

top -u userid

Sar

sar -u 2

 root@shubuntu  ~  sar -u 2                                                                            2 ↵  ⚡  23  05:07:31
Linux 4.15.0-1031-raspi2 (shubuntu) 	07/18/19 	_aarch64_	(4 CPU)

05:07:36        CPU     %user     %nice   %system   %iowait    %steal     %idle
05:07:38        all      0.00      0.00      0.13      0.00      0.00     99.87
05:07:40        all      0.00      0.00      0.25      0.00      0.00     99.75
05:07:42        all      0.00      0.00      0.13      0.25      0.00     99.62
%user 用户模式下消耗的CPU时间的比例;
%nice 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例
%system 系统模式下消耗的CPU时间的比例;
%iowait CPU等待磁盘I/O导致空闲状态消耗的时间比例;
%steal 利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例;
%idle CPU空闲时间比例;

useful command

sar -u 2

sar -u -f /va/log/sa/sa17

Vmstat

overall to check CPU status

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  1      0 3081060 110020 869352    0    0     2    20   32   46  1  0 99  0  0
 0  0      0 3081036 110024 869352    0    0     0     2   80   93  0  0 86 14  0
 0  0      0 3080912 110024 869352    0    0     0     0  121  166  0  0 100  0  0
 0  0      0 3080912 110024 869360    0    0     0     0   89  105  0  0 100  0  0

关注几点 r, b

r 表示运行队列(就是说多少个进程真的分配到CPU)
b 表示阻塞的进程
si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常
so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间

mpstat - Multiprocessor Statistics

Check more info of CPU

 root@shubuntu  ~  mpstat -P ALL 2                                                                       ✔  ⚡  21  05:06:06
Linux 4.15.0-1031-raspi2 (shubuntu) 	07/18/19 	_aarch64_	(4 CPU)

05:06:10     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
05:06:12     all    0.00    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.75
05:06:12       0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
05:06:12       1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
05:06:12       2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
05:06:12       3    0.00    0.00    0.00    1.01    0.00    0.00    0.00    0.00    0.00   98.99
%user      在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程  (usr/total)*100
%nice      在internal时间段里,nice值为负进程的CPU时间(%)   (nice/total)*100
%sys       在internal时间段里,内核时间(%)       (system/total)*100
%iowait    在internal时间段里,硬盘IO等待时间(%) (iowait/total)*100
%irq       在internal时间段里,硬中断时间(%)     (irq/total)*100
%soft      在internal时间段里,软中断时间(%)     (softirq/total)*100
%idle      在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100

Useful command:

mpstat -P ALL 2

mpstat -P 2 2 # check cpu 2 status, refresh every 2 seconds

PreviousPerformance TuningNextMomory

Last updated 5 years ago

Was this helpful?