CPU效能分析

Federico發表於2019-01-30

CPU效能分析工具

lscpu:檢視CPU硬體資訊

lscpu

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Model name:            Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz
Stepping:              0
CPU MHz:               2999.498
BogoMIPS:              6000.00
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              25600K
NUMA node0 CPU(s):     0-3
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm fsgsbase tsc_adjust smep arat

lscpu:命令可以檢視當前CPU配置資訊,包括處理器型號以及核心數快取等資訊,CPU相當於人體的大腦,在系統中起著非常重要的作用,CPU效能越高,處理任務的能力就越強。

sar/top/uptime/mpstat/vmstat:CPU效能分析工具

sar命令

  sar命令是系統管理員必須掌握的一項重要技能,sar命令可以用來分析幾乎所有的系統資訊,這就要求我們不得不掌握。

  • 安裝sar命令

yum -y install sysstat

  • 使用sar命令分析CPU負載

sar -u

[root@domainX ~]# sar -u
Cannot open /var/log/sa/sa30: No such file or directory

如果出現以上的報錯,是因為sar命令還沒有建立當天的檔案,sar會將資料寫入到/var/log/sa目錄下,如果需要也可以從該目錄下讀取響應時間段的日誌進行分析,當出現以上報錯時執行sar -o 1來建立相應檔案即可,建立檔案後可以正常使用該命令。

sar -u

Linux 3.10.0-693.el7.x86_64 (domainX.com)   01/30/2019  _x86_64_    (4 CPU)

06:34:32 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
06:34:33 AM     all      5.00      0.00      3.75      0.00      0.00     91.25
06:34:34 AM     all      4.24      0.00      4.24      0.00      0.00     91.52
06:34:35 AM     all      4.77      0.00      3.52      0.00      0.00     91.71
06:34:36 AM     all      4.51      0.00      3.51      0.00      0.00     91.98
06:34:37 AM     all      5.01      0.00      3.51      0.00      0.00     91.48
06:34:37 AM     all      6.84      0.00      5.70      0.00      0.00     87.45
06:40:01 AM     all      4.84      0.00      3.53      0.00      0.00     91.62
Average:        all      4.84      0.00      3.54      0.00      0.00     91.61
  • %user 使用者模式下消耗的CPU時間的比例;
  • %nice 通過nice改變了程式排程優先順序的程式,在使用者模式下消耗的CPU時間的比例
  • %system 系統模式下消耗的CPU時間的比例;
  • %iowait CPU等待磁碟I/O導致空閒狀態消耗的時間比例;
  • %steal 利用Xen等作業系統虛擬化技術,等待其它虛擬CPU計算佔用的時間比例;
  • %idle CPU空閒時間比例。

sar -u 執行時長 執行次數:使用詳細引數可以獲得自己需要的詳細資訊,如果只輸入一個引數,將會一直執行。

top命令

  top命令應該是工作中使用頻率較高的命令,主要可以用來分析當前系統上執行的程式佔用CPU記憶體百分比等詳情,要注意的是top命令是動態的。
top

top - 06:59:35 up 5 days,  1:50,  1 user,  load average: 1.01, 1.03, 0.87
Tasks: 196 total,   1 running, 195 sleeping,   0 stopped,   0 zombie
%Cpu0  :  4.3 us,  4.6 sy,  0.0 ni, 91.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  8.0 us,  2.3 sy,  0.0 ni, 89.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  4.0 us,  4.3 sy,  0.0 ni, 91.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  3.3 us,  3.0 sy,  0.0 ni, 93.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3865308 total,   219532 free,   903832 used,  2741944 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  2461924 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 18216 polkitd   20   0  618040  15924   5344 S   7.0  0.4 404:15.95 polkitd
  4564 vnc       20   0 3708324 387844  70204 S   6.6 10.0 340:10.11 gnome-shell
   729 dbus      20   0   63620   3752   1872 S   2.3  0.1 139:20.52 dbus-daemon
  3904 root      20   0  396292   6064   3184 S   2.0  0.2  98:04.54 accounts-daemon
  4687 vnc       20   0  456552   3364   2736 S   0.7  0.1  37:05.68 gsd-account
  4700 vnc       20   0  712568  15436   9560 S   0.3  0.4   1:38.53 gsd-color
     1 root      20   0  193920   6984   4048 S   0.0  0.2   0:19.82 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.08 kthreadd
     3 root      20   0       0      0      0 S   0.0  0.0   0:04.29 ksoftirqd/0
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     7 root      rt   0       0      0      0 S   0.0  0.0   0:29.91 migration/0
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S   0.0  0.0   3:32.82 rcu_sched
    10 root      rt   0       0      0      0 S   0.0  0.0   0:01.54 watchdog/0
    11 root      rt   0       0      0      0 S   0.0  0.0   0:01.48 watchdog/1
    12 root      rt   0       0      0      0 S   0.0  0.0   0:29.17 migration/1
    13 root      20   0       0      0      0 S   0.0  0.0   0:04.12 ksoftirqd/1
    15 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H
    16 root      rt   0       0      0      0 S   0.0  0.0   0:01.51 watchdog/2
    17 root      rt   0       0      0      0 S   0.0  0.0   0:29.48 migration/2
    18 root      20   0       0      0      0 S   0.0  0.0   0:03.82 ksoftirqd/2
    20 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/2:0H
    21 root      rt   0       0      0      0 S   0.0  0.0   0:01.50 watchdog/3
    22 root      rt   0       0      0      0 S   0.0  0.0   0:29.93 migration/3
    23 root      20   0       0      0      0 S   0.0  0.0   0:04.09 ksoftirqd/3
    25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/3:0H
    27 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs
    28 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns
    29 root      20   0       0      0      0 S   0.0  0.0   0:00.28 khungtaskd
    30 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback
    31 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd
    32 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
    33 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd
    34 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md
    40 root      20   0       0      0      0 S   0.0  0.0   0:00.14 kswapd0
    41 root      25   5       0      0      0 S   0.0  0.0   0:00.00 ksmd
    42 root      39  19       0      0      0 S   0.0  0.0   0:01.88 khugepaged
    43 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 crypto

在top動態介面中按大寫的P可以以程式的CPU佔用從高到低進行排序,方便我們在CPU使用率非常高的情況下快速定位到是那個程式導致的,按大寫的M將會以程式記憶體佔用百分比由高到低進行排序,按1將會顯示當前所有CPU的使用情況。順便說下這個命令吧,也比較常用。ps -aux --sort -pcpu是按照CPU佔用進行排序。

uptime命令

  uptime命令非常簡單,只是用來看系統執行的負載情況以及時間,沒什麼可以詳細講解的。需要我們注意的是load average給出的三個值分別代表系統1分鐘、5分鐘以及15分鐘的負載情況,如果第一個值負載很低,第三個值負載很高,那就表明15分鐘前系統的負載很高,但是現在已經恢復了,具體數值多少用來評價負載的高低呢,這個沒有一個準確的數字,正常情況下是和CPU核心數成正比的,例如:4C伺服器當負載達到4時已經非常高了。

mpstat命令

  使用此命令得到的資料和以上資料資訊類似,這裡也就不詳細解釋資料的引數了。mpstat

[root@domainX ~]# mpstat
Linux 3.10.0-693.el7.x86_64 (domainX.com)   01/30/2019  _x86_64_    (4 CPU)

07:04:31 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:04:31 AM  all    3.83    0.00    2.66    0.01    0.00    0.10    0.00    0.00    0.00   93.40

vmstat命令

  vmstat命令與mpstat命令類似,vmstat命令也提供了很多重要的系統資訊,所以我們需要對輸出內容有一定的瞭解。
vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 219660   4708 2737284    0    0     1     2    3   22  4  3 93  0  0
  • procs:b這列表示的是不可中斷睡眠的程式,這個數值往往與磁碟IO有關。
  • system:in/cs數值偏高說明系統繁忙。
  • CPU:st資源在虛擬化環境中比較重要,例如st數值偏高可能是物理主機上執行了太多虛擬機器導致。

geekbench:CPU壓測工具

  一個商業化軟體,可以對CPU效能進行壓測,最終生成web版介面評分,感興趣的同學可以執行下面的命令在Linux 7系列上進行安裝。
sudo yum -y install glibc.i686 libstdc++ libstdc++.i686
sudo wget http://qiniu.pasca.top/Geekbench-4.3.0-Linux.tar.gz
sudo tar xf Geekbench-4.3.0-Linux.tar.gz
cd Geekbench-4.3.0-Linux/
./geekbench_x86_64

相關文章