Linux常用命令:效能命令

測試開發小記發表於2021-02-02

本文介紹Linux常用效能統計分析命令,監控程式或者系統效能。主要包括CPU(top、mpstat)、記憶體(vmstat、free)、I/O(iostat)、網路效能(sar)、系統日誌資訊(demsg)、檢視程式狀態(pidstat)。下面簡要介紹這些命令的使用方法。

mpstat、iostat、pidstat和sr命令需要安裝sysstat軟體包,sysstat包含了系統效能監測工具,安裝方法如下:

yum install sysstat # CentOS
apt-get install sysstat # Ubuntu

負載

CPU負載(cpu load)指的是某個時間點程式對系統產生的壓力。表示特定時間間隔內執行佇列中的平均程式數,如果一個程式滿足以下條件則其就會位於執行佇列中:

  • 它沒有在等待IO操作的結果
  • 它沒有主動進入等待狀態(也就是沒有呼叫'wait')
  • 沒有被停止(例如:等待終止)

單CPU滿負荷執行時cpu_load為1,當多個CPU或多核時,相當於大橋有多個車道,滿負荷執行時cpu_load值為CPU數或多核數;CPU負載的計算(以單CPU為例),假設一分鐘內執行10個任務代表滿負荷,當一分鐘給出30個任務時,CPU只能處理10個,剩餘20個不能處理,cpu_load=3;

單核CPU

  • cpu load = 1,滿負載執行
  • cpu load = 0.5,半負載執行
  • cpu load = 1.7,超負載執行

一般來說,每個CPU核心當前活動程式數不大於3,則系統執行表現良好!

  • 如果多核cpu,需要累加
    • 4核cpu<12

uptime

uptime命令顯示的平均負載包括了正在或準備執行在CPU上的程式和阻塞在不可中斷睡眠狀態(uninterruptible) I/O(通常是磁碟I/O)上的程式。

[root@server ~]# uptime
 16:54:53 up 29 days,  2:02,  1 user,  load average: 0.03, 0.03, 0.00
[root@server ~]# cat /proc/loadavg
0.03 0.03 0.00 3/166 16903
  • 顯示最近1分鐘、5分鐘、15分鐘系統負載的移動平均值,它們共同展現了負載隨時間變動的情況。
  • 3:正在執行的程式數,166:總的程式數,16903:最近執行程式的ID。

ps和top命令

ps命令

ps命令是Process Status的縮寫,用於檢視系統程式資訊

  • -e,-A:顯示所有程式,包括其他使用者的程式
  • -f:顯示完整格式
  • -l:顯示長列表
  • -a:所有程式,加上-x引數會顯示沒有控制終端的程式
  • -u:username,顯示指定使用者的程式,例如ps -u root
  • -x:顯示當前使用者在所有終端下的程式
  • -aux:顯示所有程式,包括所有使用者,分組情況

ps常用用法,通常與grep組合使用

  1. 顯示dhcpd程式
ps ax | grep dhcpd | grep -v grep 
  1. ps -ef
    顯示所有程式

  2. ps -aux
    顯示所有程式

ps -aux

按照CPU或者記憶體用量來篩選程式:

ps -aux --sort -pcpu
# 或
ps -aux --sort -pmem

終止程式

# 強制中斷正在執行的命令,如,命令長時間沒有響應的情況下
Ctrl+C組合鍵

# kill命令
kill -9 程式ID
# killall命令:終止指定名稱的所有程式
killall -9 dhclient

top命令

ps命令列出的是當前程式的快照,top可用於持續監視系統效能,
動態顯示程式資訊。

  • -n 獲取多次cpu的執行情況,top -n 4:只更新4次
  • -d 間隔時間,top -d 4:每隔4秒更新一次
  • -p 獲取指定埠程式的資料,top -p 22

每隔1秒檢測指定程式的cpu,檢測20次

top -d 1 -n 20

示例

列印指定pid程式的cpu資訊,間隔時間為1s,列印20次

  1. 檢視程式的pid:
ps -ef | grep systemd

  1. 迴圈列印
# 列印一次
top -p 1 -n 1 | grep systemd | awk '{print $10}'
# 迴圈列印20次
for i in {1..20};do top -p 1 -n 1 | grep systemd | awk '{print $10}';sleep 1s;done

for((i=0;i<20;i++));do top -p 1 -n 1 | grep systemd | awk '{print $10}';sleep 1s;done

dmesg | tail

預設顯示最新的10個系統資訊,可以檢視導致效能問題的錯誤資訊。

1. 顯示最新的20個系統資訊

[root@centos7 ~]# dmesg | tail -20
[   15.356358] RPC: Registered named UNIX socket transport module.
[   15.356360] RPC: Registered udp transport module.
[   15.356361] RPC: Registered tcp transport module.
[   15.356362] RPC: Registered tcp NFSv4.1 backchannel transport module.
[   15.551529] type=1305 audit(1584428235.986:4): audit_pid=1054 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1
[   19.223990] NET: Registered protocol family 40
[   23.857606] ip6_tables: (C) 2000-2006 Netfilter Core Team
[   24.130255] Ebtables v2.0 registered
[   24.366128] Netfilter messages via NETLINK v0.30.
[   24.418582] ip_set: protocol 7
[   24.517273] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready
[   24.521156] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[   24.524658] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready
[   24.524669] IPv6: ADDRCONF(NETDEV_CHANGE): ens33: link becomes ready
[   24.528687] IPv6: ADDRCONF(NETDEV_UP): ens34: link is not ready
[   24.532350] e1000: ens34 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[   24.535760] IPv6: ADDRCONF(NETDEV_UP): ens34: link is not ready
[   24.574912] IPv6: ADDRCONF(NETDEV_UP): ens34: link is not ready
[   25.391535] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[   25.525351] IPv6: ADDRCONF(NETDEV_CHANGE): ens34: link becomes ready
[root@centos7 ~]#

2. 顯示開始的20個系統資訊

[root@centos7 ~]# dmesg | head -20
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-1062.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Wed Aug 7 18:08:02 UTC 2019
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1062.el7.x86_64 root=UUID=d7dc0c9e-a27d-4239-aba4-7c2e51d9fc93 ro crashkernel=auto spectre_v2=retpoline rhgb quiet LANG=en_US.UTF-8
[    0.000000] Disabled fast string operations
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007fedffff] usable
[    0.000000] BIOS-e820: [mem 0x000000007fee0000-0x000000007fefefff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000007feff000-0x000000007fefffff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007ff00000-0x000000007fffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 2.7 present.
[root@centos7 ~]#

vmstat 1

全稱 virtual memory stat,逐行輸出虛擬記憶體狀態統計資訊

[root@centos7 ~]# 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 1424832   2084 195100    0    0    47     4   45   55  0  0 99  1  0

vmstat 1 :每隔一秒列印一次

[root@centos7 ~]#
[root@centos7 ~]# vmstat 1   #1s列印一個
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 1424472   2084 195120    0    0    28     2   30   37  0  0 99  1  0
0  0      0 1424456   2084 195120    0    0     0     0   38   53  0  0 100  0  0
0  0      0 1424456   2084 

引數解釋:

  • r: 執行佇列中程式數量
  • b: 等待IO的程式數量
  • swpd:使用的虛擬記憶體
  • free:可用記憶體
  • buff:用作緩衝的記憶體大小
  • cache:用作快取的記憶體大小
  • us:使用者程式執行時間(user time)
  • sy:系統程式執行時間(system time
  • id:空閒時間(包括IO等待時間),中央處理器的空閒時間
  • wa:等待IO時間

free -m

檢視linux記憶體使用情況

[root@centos7 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         199        1471           9         148        1470
Swap:          4095           0        4095
  • Mem:實體記憶體
  • totel:總的實體記憶體 單位為:M
  • used:用掉的記憶體
  • free:空閒的實體記憶體
  • shared:共享記憶體
  • buff/cache:快取記憶體

mpstat -P ALL 1

mpstat是Multiprocessor Statistics的縮寫,實時監控CPU效能。
mpstat -P ALL 1 2:間隔1s列印報告,共列印2個

  • -P ALL:監控所有CPU
  • 1:間隔時間1s
  • 2:列印次數2次
[root@centos7 ~]# mpstat
Linux 3.10.0-1062.el7.x86_64 (centos7)  03/18/2020      _x86_64_        (4 CPU)

04:41:47 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:41:47 AM  all    0.66    0.00    1.39    2.65    0.00    0.01    0.00    0.00    0.00   95.28
[root@centos7 ~]#
[root@centos7 ~]# mpstat -P ALL 1
Linux 3.10.0-1062.el7.x86_64 (centos7)  03/18/2020      _x86_64_        (4 CPU)

04:44:11 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:44:11 AM  all    0.39    0.00    0.82    1.54    0.00    0.01    0.00    0.00    0.00   97.24
04:44:11 
[root@centos7 ~]#
  • %usr:間隔時間段內,使用者態的CPU時間(%),不包含 nice值為負程式
  • %nice:nice值為負程式的CPU時間(%)
  • %sys:核心時間(%)
  • %iowait:硬碟IO等待時間(%)
  • %irq:硬中斷時間(%)
  • %soft:軟中斷時間(%)
  • %steal:虛擬機器管理器在服務另一個虛擬處理器時虛擬CPU處在非自願等待下花費時間的百分比
  • %guest:執行虛擬處理器時CPU花費時間的百分比
  • %idle:CPU的空閒時間(%)

pidstat 1

pidstat用於監控全部或指定程式的資源佔用情況,和top命令類似,但不覆蓋輸出,有利於觀察資料隨時間的變動情況,top會覆蓋之前的輸出

  • pidstat -p 1 1:-p 指定程式號,間隔1s列印pid為1的程式
[root@centos7 ~]# pidstat
Linux 3.10.0-1062.el7.x86_64 (centos7)  03/18/2020      _x86_64_        (4 CPU)


04:52:29 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
04:52:29 AM     0         1    0.05    0.19    0.00    0.24     0  systemd
04:52:29 AM     0         2    0.00    0.00    0.00    0.00     3  kthreadd
04:52:29 AM     0         6    0.00    0.00    0.00    0.00     0  ksoftirqd/0
04:52:29 
  • PID:程式ID
  • %usr:程式在使用者空間佔用cpu的百分比
  • %system:程式在核心空間佔用cpu的百分比
  • %guest:程式在虛擬機器佔用cpu的百分比
  • %CPU:程式佔用cpu的百分比,各個CPU上的使用量的總和
  • CPU:處理程式的cpu編號
  • Command:當前程式對應的命令

iostat 1

iostat用於顯示CPU和塊裝置(磁碟I/O)相關的統計資訊

[root@centos7 ~]# iostat 1
Linux 3.10.0-1062.el7.x86_64 (centos7)  03/18/2020      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.15    0.00    0.34    0.60    0.00   98.92


Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               9.46       158.59        15.05     142895      13561
scd0              0.02         1.14         0.00       1028          0

avg-cpu:總體cpu使用情況統計資訊
linux各種裝置檔案在/dev目錄下可以看到

  • tps:每秒程式向磁碟裝置下發的IO讀、寫請求數量
  • kB_read/s:每秒從驅動器讀入的資料量
  • kB_wrtn/s:每秒從驅動器寫入的資料量
  • kB read:讀入資料總量
  • kB wrtn:寫入資料總量

sar命令

sar(System ActivityReporter):系統活動情況報告,
是Linux系統效能分析工具。可以用來分析磁碟I/O、CPU效率、記憶體使用等,下面介紹它的分析網路效能用法。

sar -n DEV 1

檢查網路流量的工作負載,可用來檢查網路流量是否已經達到限額。

[root@centos7 dev]# sar -n DEV 1
Linux 4.18.0-147.5.1.el8_1.x86_64 (iZ8vb54310gt89j8qct198Z)     12/19/2020      _x86_64_        (1 CPU)

08:08:37 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
08:08:38 PM      eth0      4.00      2.00      0.23      0.27      0.00      0.00      0.00      0.00
08:08:38 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
08:08:38 PM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

sar -n TCP 1

顯示TCP連線情況,可用來描述系統負載

[root@centos7 dev]# sar -n TCP,ETCP 1
Linux 4.18.0-147.5.1.el8_1.x86_64 (iZ8vb54310gt89j8qct198Z)     12/19/2020      _x86_64_        (1 CPU)

08:15:48 PM  active/s passive/s    iseg/s    oseg/s
08:15:49 PM      0.00      0.00      1.00      1.00

08:15:48 PM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
08:15:49 PM      0.00      0.00      0.00      0.00      0.00
  • active/s:主動連線數,本地每秒建立的TCP連線數
  • passive/s:被動連線數,遠端每秒建立的TCP連線數
  • retrans/s:每秒TCP重傳次數
--THE END--

文章標題:Linux常用命令:效能命令
本文作者:hiyo
本文連結:https://www.cnblogs.com/hiyong/p/14175939.html
歡迎關注公眾號:「測試開發小記」及時接收最新技術文章!

相關文章