Linux服務器性能查看命令

一、uptime命令

[root@#test~]# uptime<br>15:26:42 up 101 days, 18:44,  3 users,  load average: 0.18, 0.22, 0.19

這個命令可以快速查看機器的負載情況。在Linux系統中,這些數據表示等待CPU資源的進程和阻塞在不可中斷IO進程(進程狀態爲D)的數量。這些數據可以讓我們對系統資源使用有一個宏觀的瞭解。

命令的輸出分別表示1分鐘、5分鐘、15分鐘的平均負載情況。通過這三個數據,可以瞭解服務器負載是在趨於緊張還是趨於緩解。如果1分鐘平均負載很高,而15分鐘平均負載很低,說明服務器正在命令高負載情況,需要進一步排查CPU資源都消耗在了哪裏。反之,如果15分鐘平均負載很高,1分鐘平均負載較低,則有可能是CPU資源緊張時刻已經過去。

上面例子中的輸出,可以看見最近1分鐘的平均負載非常高,且遠高於最近15分鐘負載,因此我們需要繼續排查當前系統中有什麼進程消耗了大量的資源。可以通過下文將會介紹的vmstat、mpstat等命令進一步排查。

二、dmesg命令

[root@#test ~]# dmesg | tail
[8781257.892708] [15693]     0 15693    31339      324      20        0          -500 docker-proxy
[8781257.892710] [15706]     0 15706    47723      166      20      152          -500 docker-proxy
[8781257.892712] [15714]     0 15714     2944      664      10       40          -999 containerd-shim
[8781257.892714] [15732]  1100 15732     4935        1      14       83             0 docker-entrypoi
[8781257.892716] [15817]  1100 15817  1182396    99096     393    22698             0 java
[8781257.892719] [20545]     0 20545    22827     2800      37        0          -999 containerd
[8781257.892721] [20553]     0 20553    14374      868      23        0          -999 runc
[8781257.892722] [20565]     0 20565    33148       53      21      123             0 crond
[8781257.892724] Out of memory: Kill process 12276 (java) score 104 or sacrifice child
[8781257.895823] Killed process 12276 (java) total-vm:5099720kB, anon-rss:578008kB, file-rss:0kB, shmem-rss:0kB

mesg命令被用於檢查和控制內核的環形緩衝區。kernel會將開機信息存儲在ring buffer中。您若是開機時來不及查看信息,可利用dmesg來查看,開機信息保存在/var/log/dmesg文件裏。

該命令會輸出系統日誌的最後10行。示例中的輸出,可以看見Out of  memory,超出了內存,java進程被kill掉了。這些日誌可以幫助排查性能問題,千萬不要忘了這一步。

三、vmstat命令

[root@#test ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0 3721428 126520      0 494588    2    1    31     6    1    0  1  1 98  0  0
 1  0 3721428 126396      0 494620    0    0     0    15 2875 5326  1  1 98  0  0
 0  0 3721428 126428      0 494620    0    0     0    16 3104 5673  1  1 98  0  0
 0  0 3721428 126304      0 494620    0    0     0    14 2932 5458  1  1 98  0  0
 0  0 3721428 126272      0 494572   60    0    60    19 3010 5495  1  1 97  1  0
 1  0 3721428 121860      0 494624    0    0     0    45 5701 9162  7  5 88  0  0
 0  0 3721428 125652      0 494612   20    0    20    16 3292 5955  2  2 97  0  0
 0  0 3721428 125684      0 494632    0    0     0    14 2965 5480  2  1 97  0  0

vmstat(8) 命令,每行會輸出一些系統核心指標,這些指標可以讓我們更詳細的瞭解系統狀態。後面跟的參數1,表示每秒輸出一次統計信息,表頭提示了每一列的含義,這幾介紹一些和性能調優相關的列:

r:等待在CPU資源的進程數。這個數據比平均負載更加能夠體現CPU負載情況,數據中不包含等待IO的進程。如果這個數值大於機器CPU核數,那麼機器的CPU資源已經飽和。
free:系統可用內存數(以千字節爲單位),如果剩餘內存不足,也會導致系統性能問題。下文介紹到的free命令,可以更詳細的瞭解系統內存的使用情況。
si,so:交換區寫入和讀取的數量。如果這個數據不爲0,說明系統已經在使用交換區(swap),機器物理內存已經不足。
us, sy, id, wa, st:這些都代表了CPU時間的消耗,它們分別表示用戶時間(user)、系統(內核)時間(sys)、空閒時間(idle)、IO等待時間(wait)和被偷走的時間(stolen,一般被其他虛擬機消耗)。
上述這些CPU時間,可以讓我們很快了解CPU是否出於繁忙狀態。一般情況下,如果用戶時間和系統時間相加非常大,CPU出於忙於執行指令。如果IO等待時間很長,那麼系統的瓶頸可能在磁盤IO。

四、mpstat命令

[root@#test ~]# mpstat -P ALL 1
Linux 3.10.0-957.1.3.el7.x86_64 (#test.com)     2019年07月15日     _x86_64_    (4 CPU)
 
15時30分10秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
15時30分11秒  all    1.01    0.00    0.76    0.25    0.00    0.00    0.00    0.00    0.00   97.98
15時30分11秒    0    1.01    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.99
15時30分11秒    1    1.01    0.00    1.01    1.01    0.00    0.00    0.00    0.00    0.00   96.97
15時30分11秒    2    1.02    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.98
15時30分11秒    3    1.01    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   97.98
 
15時30分11秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
15時30分12秒  all    1.52    0.00    0.76    0.00    0.00    0.00    0.00    0.00    0.00   97.72
15時30分12秒    0    1.02    0.00    1.02    0.00    0.00    0.00    0.00    0.00    0.00   97.96
15時30分12秒    1    2.02    0.00    2.02    0.00    0.00    0.00    0.00    0.00    0.00   95.96
15時30分12秒    2    2.02    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   97.98
15時30分12秒    3    1.02    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.98
 
15時30分12秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
15時30分13秒  all    0.76    0.00    0.76    0.25    0.00    0.00    0.00    0.00    0.00   98.23
15時30分13秒    0    1.01    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   97.98
15時30分13秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
15時30分13秒    2    0.00    0.00    1.02    0.00    0.00    0.00    0.00    0.00    0.00   98.98
15時30分13秒    3    1.01    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.99

該命令可以顯示每個CPU的佔用情況,如果有一個CPU佔用率特別高,那麼有可能是一個單線程應用程序引起的。

五、pidstat命令

[root@#test ~]# pidstat 1
Linux 3.10.0-957.1.3.el7.x86_64 (#test.com)     2019年07月15日     _x86_64_    (4 CPU)
 
15時32分51秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
15時32分52秒  1000       566    0.95    0.00    0.00    0.95     1  java
15時32分52秒     0      1408    0.95    0.00    0.00    0.95     3  containerd
15時32分52秒     0      3741    0.00    0.95    0.00    0.95     3  java
15時32分52秒     0      6399    0.95    0.00    0.00    0.95     1  java
15時32分52秒     0     15272    0.00    2.86    0.00    2.86     0  freeswitch
15時32分52秒     0     15714    1.90    0.95    0.00    2.86     3  containerd-shim
15時32分52秒  1100     15817    0.95    0.95    0.00    1.90     2  java
15時32分52秒     0     19899    0.95    1.90    0.00    2.86     1  pidstat
15時32分52秒     0     19944    0.95    1.90    0.00    2.86     3  containerd
15時32分52秒     0     20395    0.00    1.90    0.00    1.90     2  freeswitch
 
15時32分52秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
15時32分53秒   999       565    1.00    1.00    0.00    2.00     0  mongod
15時32分53秒  1000       566    0.00    1.00    0.00    1.00     1  java
15時32分53秒     0      1412    0.00    1.00    0.00    1.00     1  dockerd
15時32分53秒     0      3337    1.00    0.00    0.00    1.00     3  java
15時32分53秒  1000      5570    1.00    0.00    0.00    1.00     3  java
15時32分53秒     0      6399    0.00    1.00    0.00    1.00     1  java
15時32分53秒     0     13255    0.00    1.00    0.00    1.00     3  java
15時32分53秒     0     13371    1.00    0.00    0.00    1.00     3  java
15時32分53秒     0     15075    0.00    1.00    0.00    1.00     1  java
15時32分53秒     0     15272    0.00    4.00    0.00    4.00     0  freeswitch
15時32分53秒     0     15714    1.00    0.00    0.00    1.00     3  containerd-shim
15時32分53秒  1100     15817    1.00    0.00    0.00    1.00     2  java
15時32分53秒     0     19899    0.00    1.00    0.00    1.00     1  pidstat
15時32分53秒     0     20395    0.00    1.00    0.00    1.00     3  freeswitc

pidstat命令輸出進程的CPU佔用率,該命令會持續輸出,並且不會覆蓋之前的數據,可以方便觀察系統動態。如上的輸出,可以看見兩個JAVA進程佔用了將近1600%的CPU時間,既消耗了大約16個CPU核心的運算資源。

六、iostat命令

[root@#test ~]# iostat -xz 1
Linux 3.10.0-957.1.3.el7.x86_64 (#test.com)     2019年07月15日     _x86_64_    (4 CPU)
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.91    0.00    0.97    0.06    0.00   98.06
 
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
scd0              0.00     0.00    0.00    0.00     0.00     0.00   114.22     0.00   16.11   16.11    0.00  15.83   0.00
sda               1.46     0.71    1.76    1.85   121.30    25.18    81.14     0.02    6.14    7.41    4.92   0.97   0.35
dm-0              0.00     0.00    1.49    1.62   114.33    21.42    87.33     0.02    6.12    7.78    4.60   0.76   0.24
dm-1              0.00     0.00    1.74    0.94     6.96     3.77     8.00     0.03   12.42    6.49   23.36   0.48   0.13

r/s, w/s, rkB/s, wkB/s:分別表示每秒讀寫次數和每秒讀寫數據量(千字節)。讀寫量過大,可能會引起性能問題。
await:IO操作的平均等待時間,單位是毫秒。這是應用程序在和磁盤交互時,需要消耗的時間,包括IO等待和實際操作的耗時。如果這個數值過大,可能是硬件設備遇到了瓶頸或者出現故障。
avgqu-sz:向設備發出的請求平均數量。如果這個數值大於1,可能是硬件設備已經飽和(部分前端硬件設備支持並行寫入)。
%util:設備利用率。這個數值表示設備的繁忙程度,經驗值是如果超過60,可能會影響IO性能(可以參照IO操作平均等待時間)。如果到達100%,說明硬件設備已經飽和。
如果顯示的是邏輯設備的數據,那麼設備利用率不代表後端實際的硬件設備已經飽和。值得注意的是,即使IO性能不理想,也不一定意味這應用程序性能會不好,可以利用諸如預讀取、寫緩存等策略提升應用性能。

七、free命令

[root@#test ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3789        3181         123           4         484         313
Swap:          3967        3635         332

free命令可以查看系統內存的使用情況,-m參數表示按照兆字節展示。最後兩列分別表示用於IO緩存的內存數,和用於文件系統頁緩存的內存數。需要注意的是,第二行-/+ buffers/cache,看上去緩存佔用了大量內存空間。

這是Linux系統的內存使用策略,儘可能的利用內存,如果應用程序需要內存,這部分內存會立即被回收並分配給應用程序。因此,這部分內存一般也被當成是可用內存。

如果可用內存非常少,系統可能會動用交換區(如果配置了的話),這樣會增加IO開銷(可以在iostat命令中提現),降低系統性能。

八、sar命令

[root@#test ~]# sar -n DEV 1
Linux 3.10.0-957.1.3.el7.x86_64 (#test.com)     2019年07月15日     _x86_64_    (4 CPU)
 
15時36分45秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
15時36分46秒 vethdb57189      2.00      4.00      0.72      0.62      0.00      0.00      0.00
15時36分46秒 veth734ba4e     30.00     22.00      7.70      7.25      0.00      0.00      0.00
15時36分46秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15時36分46秒 br-502e803e527a      2.00      4.00      1.40      1.87      0.00      0.00      0.00
15時36分46秒    ens160      8.00      4.00      2.17      1.55      0.00      0.00      0.00
15時36分46秒   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
15時36分46秒 veth77e2aad     16.00     24.00      4.65      5.66      0.00      0.00      0.00

sar命令在這裏可以查看網絡設備的吞吐率。在排查性能問題時,可以通過網絡設備的吞吐量,判斷網絡設備是否已經飽和。

[root@#test ~]# sar -n TCP,ETCP 1
Linux 3.10.0-957.1.3.el7.x86_64 (#test.com)     2019年07月15日     _x86_64_    (4 CPU)
 
15時39分28秒  active/s passive/s    iseg/s    oseg/s
15時39分29秒      1.00      0.00      3.00      2.00
 
15時39分28秒  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
15時39分29秒      1.00      0.00      0.00      0.00      1.00
 
15時39分29秒  active/s passive/s    iseg/s    oseg/s
15時39分30秒      0.00      0.00      3.00      3.00
 
15時39分29秒  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
15時39分30秒      0.00      0.00      0.00      0.00      0.00

sar命令在這裏用於查看TCP連接狀態,其中包括:

active/s:每秒本地發起的TCP連接數,既通過connect調用創建的TCP連接;
passive/s:每秒遠程發起的TCP連接數,即通過accept調用創建的TCP連接;
retrans/s:每秒TCP重傳數量;
TCP連接數可以用來判斷性能問題是否由於建立了過多的連接,進一步可以判斷是主動發起的連接,還是被動接受的連接。TCP重傳可能是因爲網絡環境惡劣,或者服務器壓

九、top命令

top命令包含了前面好幾個命令的檢查的內容。比如系統負載情況(uptime)、系統內存使用情況(free)、系統CPU使用情況(vmstat)等。因此通過這個命令,可以相對全面的查看系統負載的來源。同時,top命令支持排序,可以按照不同的列排序,方便查找出諸如內存佔用最多的進程、CPU佔用率最高的進程等。

但是,top命令相對於前面一些命令,輸出是一個瞬間值,如果不持續盯着,可能會錯過一些線索。這時可能需要暫停top命令刷新,來記錄和比對數據。

 

 

轉載:https://www.cnblogs.com/it-davidchen/p/11189280.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章