Linux性能檢測經常使用的10個基本命令

今天給你們介紹一下經常使用檢測性能的10個基本命令。java

1. uptimelinux

$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02

該命令能夠大體的看出計算機的總體負載狀況,load average後的數字分別表示計算機在1min、5min、15min內的平均負載。ios

2. dmesg | taildocker

$ dmesg | tail  
[1880957.563150]perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0  
[...]  
[1880957.563400] Out of memory: Kill process18694 (perl) score246or sacrifice child  
[1880957.563408] Killed process18694 (perl) total-vm:1972392kB, anon-rss:1953348kB,file-rss:0kB  
[2320864.954447] TCP: Possible SYN floodingon port7001. Dropping request. Check SNMP counters.

打印內核環形緩存區中的內容,能夠用來查看一些錯誤;segmentfault

上面的例子中,顯示進程18694 因引內存越界被kill掉以及TCP request被丟棄的錯誤。經過dmesg能夠快速判斷是否有致使系統性能異常的問題。緩存

3. vmstat 1網絡

$ vmstat1  
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 rb swpd free buff cache siso    bibo   incs ussy idwast  
34 0 0 200889792 73708 591828 0 0 0 5 610961300  
32 0 0 200889920 73708 591860 0 0 0 592 132844282981100  
32 0 0 200890112 73708 591860 0 0 0 0 95012154991000  
32 0 0 200889568 73712 591856 0 0 0 48 119002459990000  
32 0 0 200890208 73712 591860 0 0 0 0 158984840981100

打印進程、內存、交換分區、IO和CPU等的統計信息;dom

vmstat的格式以下性能

vmstat [options] [delay [count]]

vmstat第一次輸出表示從開機到vmstat運行時的平均值;剩餘輸出的都是在指定的時間間隔內的平均值,上述例子中delay的值設置爲1,除第一次之外,剩餘的都是1秒統計一次,count未設置,將會一直循環打印。spa

$ vmstat 10 3procs -----------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 2527112 1086888 13720228    0    0     1    14    2    1  1  1 99  0  0 
0  0      0 2527156 1086888 13719856    0    0     0   104 3003 4901  0  0 99  0  0 
0  0      0 2526412 1086888 13719904    0    0     0    10 3345 4870  0  1 99  0  0

上述的例子中delay設置爲10,count設置爲3,表示每行打印10秒內的平均值,只打印3次。

須要檢查的列

  • r:表示正在運行或者等待CPU調度的進程數。由於該列數據不包含I/O的統計信息,所以能夠用來檢測CPU是否飽和。若r列中的數字大於CPU的核數,表示CPU已經處於飽和狀態。
  • free:當前剩餘的內存;
  • si, so:交換分區換入和換出的個數,若換入換出個數大於0,表示內存不足;
  • us, sy, id, wa:CPU的統計信息,分別表示user time、system time(kernel)、idle、wait I/O。I/O處理所用的時間包含在system time中,所以若system time超過20%,則I/O可能存在瓶頸或異常;

4. mpstat -P ALL 1

$ mpstat -P ALL
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 05/30/2018 _x86_64_ (16 CPU)
04:03:55 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:03:55 PM all 3.67 0.00 0.61 0.71 0.00 0.00 0.00 0.00 0.00 95.02
04:03:55 PM 0 3.52 0.00 0.57 0.76 0.00 0.00 0.00 0.00 0.00 95.15
04:03:55 PM 1 3.83 0.00 0.61 0.71 0.00 0.00 0.00 0.00 0.00 94.85
04:03:55 PM 2 3.80 0.00 0.61 0.60 0.00 0.00 0.00 0.00 0.00 94.99
04:03:55 PM 3 3.68 0.00 0.58 0.60 0.00 0.00 0.00 0.00 0.00 95.13
04:03:55 PM 4 3.54 0.00 0.57 0.60 0.00 0.00 0.00 0.00 0.00 95.30
[...]

該命令用於每秒打印一次每一個CPU的統計信息,可用於查看CPU的調度是否均勻。

5. pidstat 1

$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015    _x86_64_ (32 CPU)

07:41:02 PM UID PID %usr %system  %guest %CPU CPU Command
07:41:03 PM 0         9    0.00    0.94    0.00    0.94     1  rcuos/0
07:41:03 PM 0      4214    5.66    5.66    0.00   11.32    15  mesos-slave
07:41:03 PM 0      4354    0.94    0.94    0.00    1.89     8  java
07:41:03 PM 0      6521 1596.23    1.89    0.00 1598.11    27  java
07:41:03 PM 0      6564 1571.70    7.55    0.00 1579.25    28  java
07:41:03 PM 60004     60154    0.94    4.72    0.00    5.66     9  pidstat

07:41:03 PM UID PID %usr %system  %guest %CPU CPU Command
07:41:04 PM 0      4214    6.00    2.00    0.00    8.00    15  mesos-slave
07:41:04 PM 0      6521 1590.00    1.00    0.00 1591.00    27  java
07:41:04 PM 0      6564 1573.00   10.00    0.00 1583.00    28  java
07:41:04 PM 108      6718    1.00    0.00    0.00    1.00     0  snmp-pass
07:41:04 PM 60004     60154    1.00    4.00    0.00    5.00     9  pidstat
^C

該命令用於打印各個進程對CPU的佔用狀況,相似top命令中顯示的內容。pidstat的優點在於,能夠滾動的打印進程運行狀況,而不像top那樣會清屏。

上述例子中,%CPU中兩個java進程的cpu利用率分別達到了1590%和1573%,表示java進程佔用了16顆CPU。

6. iostat -xz 1

相似vmstat,第一次輸出的是從系統開機到統計這段時間的採樣數據;

$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015  _x86_64_ (32 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle          
73.96    0.00    3.73    0.03    0.06   22.21

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00     0.23    0.21    0.18     4.52     2.08    34.37     0.00    9.98   13.80    5.42   2.44   0.09
xvdb 0.01     0.00    1.02    8.94   127.97   598.53   145.79     0.00    0.43    1.78    0.28   0.25   0.25
xvdc 0.01     0.00    1.02    8.86   127.79   595.94   146.50     0.00    0.45    1.82    0.30   0.27   0.26
dm-0        0.00     0.00    0.69    2.32    10.47    31.69    28.01     0.01    3.23    0.71    3.98   0.13   0.04
dm-1        0.00     0.00    0.00    0.94     0.01     3.78     8.00     0.33  345.84    0.04  346.81   0.01   0.00
dm-2        0.00     0.00    0.09    0.07     1.35     0.36    22.50     0.00    2.55    0.23    5.62   1.78   0.03
[...]^C

檢查列

  • r/s, w/s, rkB/s, wkB/s,表示每秒向I/O設備發出的reads、writes、read Kbytes、write Kbytes的數量。
  • await,表示應用程序排隊等待和被服務的平均I/O時間,該值若大於預期的時間,這表示I/O設備處於飽和狀態或者異常。
  • avgqu-sz,表示請求被髮送給I/O設備的平均時間,若該值大於1,則表示I/O設備可能已經飽和;
  • %util,每秒設備的利用率;若該利用率超過60%,則表示設備出現性能異常;

7. free -m

$ free -m            
      total used free shared buffers     cached
Mem: 245998      24545     221453         83         59        541
-/+ buffers/cache: 23944     222053
Swap: 0          0          0

檢查的列:

  • buffers: For the buffer cache, used for block device I/O.
  • cached: For the page cache, used by file systems.
  • 若buffers和cached接近0,說明I/O的使用率太高,系統存在性能問題。
  • Linux中會用free內存做爲cache,若應用程序須要分配內存,系統可以快速的將cache佔用的內存回收,所以free的內存包含cache佔用的部分。

8. sar -n DEV 1

sar是System Activity Reporter的縮寫,系統活動狀態報告。

-n { keyword [,…] | ALL },用於報告網絡統計數據。keyword能夠是如下的一個或者多個:DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 和UDP6。

  • -n DEV 1, 每秒統計一次網絡的使用狀況;
  • -n EDEV 1,每秒統計一次錯誤的網絡信息;
$ sar -n DEV 1
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 05/31/2018  _x86_64_ (16 CPU)

03:54:57 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
03:54:58 PM ens32 3286.00   7207.00    283.34  18333.90      0.00      0.00      
0.003:54:58 PM lo      0.00      0.00      0.00      0.00      0.00      0.00      
0.0003:54:58 PM vethe915e51 0.00      0.00      0.00      0.00      0.00      0.00     
0.0003:54:58 PM docker0 0.00      0.00      0.00      0.00      0.00      0.00     

0.0003:54:58 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
03:54:59 PM ens32 3304.00   7362.00    276.89  18898.51      0.00      0.00      
0.0003:54:59 PM lo      0.00      0.00      0.00      0.00      0.00      0.00      
0.0003:54:59 PM vethe915e51 0.00      0.00      0.00      0.00      0.00      0.00     
0.0003:54:59 PM docker0 0.00      0.00      0.00      0.00      0.00      0.00      0.00
^C
  • IFACE ,網絡接口名稱;
  • rxpck/s ,每秒接收到包數;
  • txpck/s ,每秒傳輸的報數;(transmit packages)
  • rxkB/s ,每秒接收的千字節數;
  • txkB/s ,每秒發送的千字節數;
  • rxcmp/s ,每秒接收的壓縮包的數量;
  • txcmp/s ,每秒發送的壓縮包的數量;
  • rxmcst/s,每秒接收的組數據包數量;

9. sar -n TCP,ETCP 1

該命令能夠用於粗略的判斷網絡的吞吐量,如發起的網絡鏈接數量和接收的網絡鏈接數量;

  • TCP, 報告關於TCPv4網絡流量的統計信息;
  • ETCP, 報告有關TCPv4網絡錯誤的統計信息;
$ sar -n TCP,ETCP 1
Linux 3.10.0-514.26.2.el7.x86_64 (aushop) 05/31/2018 _x86_64_ (2 CPU)

04:16:27 PM active/s passive/s iseg/s oseg/s04:16:44 PM 0.00 2.00 15.00 13.00
04:16:45 PM 0.00 3.00 126.00 203.00
04:16:46 PM 0.00 0.00 99.00 99.00
04:16:47 PM 0.00 0.00 18.00 9.00
04:16:48 PM 0.00 0.00 5.00 6.00
04:16:49 PM 0.00 0.00 1.00 1.00
04:16:50 PM 0.00 1.00 4.00 4.00
04:16:51 PM 0.00 3.00 171.00 243.00
^C

檢測的列:

  • active/s: Number of locally-initiated TCP connections per second (e.g., via connect()),發起的網絡鏈接數量;
  • passive/s: Number of remotely-initiated TCP connections per second (e.g., via accept()),接收的網絡鏈接數量;
  • retrans/s: Number of TCP retransmits per second,重傳的數量;

10. top

top命令包含更多的指標統計,至關於一個綜合命令。

$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem   

PID USER      PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
20248 root 20   0  0.227t 0.012t 18748 S 3090  5.2  29812:58 java  
4213 root 20   0 2722544  64640  44232 S 23.5  0.0 233:35.37 mesos-slave 
66128 titancl+ 20   0   24344   2332   1172 R 1.0  0.0   0:00.07 top  
5235 root 20   0 38.227g 547004  49996 S 0.7  0.2   2:02.74 java  
4299 root 20   0 20.015g 2.682g 16836 S 0.3  1.1  33:14.42 java 
1 root 20   0   33620   2920   1496 S 0.0  0.0   0:03.82 init    
2 root 20   0       0      0      0 S 0.0  0.0   0:00.02 kthreadd 
3 root 20   0       0      0      0 S 0.0  0.0   0:05.35 ksoftirqd/0   
5 root 0 -20       0      0      0 S 0.0  0.0   0:00.00 kworker/0:0H  
6 root 20   0       0      0      0 S 0.0  0.0   0:06.94 kworker/u256:0   
8 root 20   0       0      0      0 S 0.0  0.0   2:38.05 rcu_sched

11. 總結

下面的圖片很好的展現了各個命令的主要做用,如使用vmstat查看系統的總體性能,mpstat用於查看cpu的性能,pidstat用於查看進程的狀態,iostat用於查看io的狀態,free用於產看內存的狀態,sar用於產看網絡的狀態等。

原文:https://medium.com/netflix-te...

若有錯誤或其它問題,歡迎小夥伴留言評論、指正。若有幫助,歡迎點贊+轉發分享。

歡迎你們關注民工哥的公衆號:民工哥技術之路
image.png

相關文章
相關標籤/搜索