linux性能監控命令


vmstat

可以用來監控虛擬內存。可對操作系統的虛擬內存、IO、CPU等多個指標的整體情況進行監視。

Linux系統的內存分為物理內存和虛擬內存兩種。物理內存是真實的,也就是物理內存條上的內存。而虛擬內存則是采用硬盤空間補充物理內存,將暫時不使用的內存頁寫到硬盤上以騰出更多的物理內存讓有需要的進程使用。當這些已被騰出的內存頁需要再次使用時才從硬盤(虛擬內存)中讀回內存。這一切對於用戶來說是透明的。通常對Linux系統來說,虛擬內存就是swap分區。

hello@ubuntu:~$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0  10336 287032  16856 266904    0    9   556   278  155  452 15  4 79  2  0

內存方面:

swpd:已經使用的交換內存(kb)

free:空閑的物理內存(kb)

buff:用作緩沖區的內存數(kb)

cache:用作高速緩存的內存數(kb)

si、so 兩列,表示磁盤和內存之間交換的頻繁程度。

分析思路:

如果 si、so 數值長期很大並且free長期很小,表示物理內存不能滿足需要,也就是內存不足。由於磁盤的性能比內存是慢很多的,所以如果存在大量的頁面交換,那么系統的性能必然會受到很大影響。

CPU方面:

r:展示了正在執行和等待cpu資源的任務個數。當這個值超過了cpu個數,就會出現cpu瓶頸。

us:用戶CPU時間。

sy:系統CPU時間。

id:空閑CPU時間。

wa:等等I/O CPU時間。

us+sy+id+wa=100%

分析思路:

如果 r 經常大於4,且id經常小於40,表面CPU的負荷很重。

free

可以用來觀察內存使用情況。

hello@ubuntu:~$ free
             total       used       free     shared    buffers     cached
Mem:       1024708     735760     288948       3712      43352     291540
-/+ buffers/cache:     400868     623840
Swap:      1046524          0    1046524

total= used + free

分析思路:

當 –/+ buffers/cache中的free長時間接近0,且 swap used長時間比較大時,說明物理內存已經不夠用了,需要升級內存或降低內存的使用量。

pmap

格式 pmap pid

會詳細顯示該進程所用的內存情況。

iostat

可以用來監控磁盤I/O的情況。

hello@ubuntu:~$ iostat
Linux 3.19.0-25-generic (ubuntu)     01/12/2017     _i686_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.02    5.66    4.47    1.92    0.00   82.94

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              35.98       599.77       179.38     644419     192732

顯示結果為從系統開機到當前執行時刻的統計信息。

第一行顯示系統版本、主機名、日期等信息。

avg-cpu:顯示總體CPU使用情況統計信息。如果是多核CPU的話,這里取平均值。

Device: 顯示各磁盤設備的IO統計信息。

主要關注點:

avg-cpu 的 %iowait:表明CPU用於等待I/O請求完成的時間。

Device 的 tps:每秒進程下發的I/O讀寫請求數量。

hello@ubuntu:~$ iostat -x
Linux 3.19.0-25-generic (ubuntu)     01/12/2017     _i686_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.51    1.66    5.25    1.89    0.00   85.69

Device:     rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda           0.20    10.88   31.60    4.14   660.97   131.62    44.36     0.44   12.45    7.26   52.10   1.94   6.95

顯示和I/O相關的更詳細的數據。

主要關注點:

avgqu-sz:是平均請求隊列的長度。毫無疑問,隊列長度越短越好。

await: 每一個IO請求的處理的平均時間(單位是微秒毫秒)。這里可以理解為IO的響應時間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了。這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大於svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。

svctm 表示平均每次設備I/O操作的服務時間(以毫秒為單位)。如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高於svctm的值,則表示I/O隊列等待太長, 系統上運行的應用程序將變慢。

%util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閑置,那么該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的並發能力,所以磁盤使用未必就到了瓶頸)。

分析思路:

如果%util值長期處於100%左右,並且avgqu-sz的值比較大,同時await的值遠大於svctm,可以認為磁盤的處理能力不夠。

如果只有一個指標持續走高,需要結合mem指標來看,是否是由於內存空間不夠導致磁盤的使用增加。

mpstate

Multiprocessor Statistics的縮寫。在多CPU的系統里,可以查看所有CPU的信息。

hello@ubuntu:~$ mpstat
Linux 3.19.0-25-generic (ubuntu)     01/12/2017     _i686_    (1 CPU)

02:25:11 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:25:11 PM  all    1.20    0.03    0.60    0.05    0.00    0.00    0.00    0.00    0.00   98.12

雖然vmstat、iostat以及 top 也可以查看CPU信息,但是它們都是顯示平均數,並不會顯示每個CPU的情況。

top

可以實時顯示系統中各個進程的占用情況。

top - 11:09:48 up 6 min,  2 users,  load average: 0.09, 0.38, 0.24
Tasks: 213 total,   1 running, 212 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.4 us,  6.9 sy,  1.0 ni, 84.5 id,  1.3 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1024708 total,   724056 used,   300652 free,    43336 buffers
KiB Swap:  1046524 total,        0 used,  1046524 free.   291540 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND      
 1062 root      20   0   42800   6268   5656 S  6.3  0.6   0:00.66 vmtoolsd     
 1359 root      20   0  152696  38144  18172 S  6.3  3.7   0:04.40 Xorg         
 2621 root      20   0  127824  27712  23344 S  6.3  2.7   0:01.52 gnome-termi+ 
    1 root      20   0    4472   3664   2576 S  0.0  0.4   0:03.98 init         
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd     
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.12 ksoftirqd/0  
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H 

上部分列出了系統整體的統計信息:任務、CPU、內存、交換區等信息。

下部分列出了進程的詳細情況。

uptime

可以查看系統負載。顯示的和top命令第一行一樣。

hello@ubuntu:~$ uptime
 14:54:25 up  3:36,  2 users,  load average: 0.00, 0.01, 0.05

當前時間 14:54:25

系統已運行時間 3:36

當前在線用戶 2個

平均負載:一定時間內CPU任務隊列的平均長度,是在一段時間內CPU正在處理以及等待CPU處理的進程數之和的統計信息。上面3個數分別是“最近一分鍾系統的負載(0.00)、最近5分鍾系統的負載(0.01)、最近15分鍾系統的負載(0.05)”

分析思路:

如果load average指標的5分鍾以及15分鍾的值長 大於 CPU個數*CPU核數*0.7,並且us長時間比較高,說明CPU不夠用,需要升級CPU或調整程序的算法降低CPU的使用率。

ps

顯示10個消耗CPU最多的進程:

ps aux|sort -rnk +3|head -10

顯示10個消耗內存最多的進程:

ps aux|sort -rnk +4|head -10

netstat

可以顯示各種網絡相關信息,比如各個連接的類型、狀態等。

hello@ubuntu:~$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp6       1      0 ip6-localhost:57202     ip6-localhost:ipp       CLOSE_WAIT 
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  22     [ ]         DGRAM                    9729     /dev/log
unix  3      [ ]         STREAM     CONNECTED     15455    
unix  3      [ ]         STREAM     CONNECTED     15033    @/tmp/dbus-EgyAIj0Ftz
unix  3      [ ]         STREAM     CONNECTED     16260    
unix  3      [ ]         STREAM     CONNECTED     13897    
unix  3      [ ]         STREAM     CONNECTED     15077    /var/run/dbus/system_bus_socket

比如顯示所有狀態為“TIME_WAIT”的連接:

hello@ubuntu:~$ netstat -ae|grep "TIME_WAIT"

 

備注

實時監控時,可以用watch命令。

watch可以幫你監測一個命令的運行結果,省得你一遍遍的手動運行。在Linux下,watch是周期性的執行下個程序,並全屏顯示執行結果。你可以拿他來監測你想要的一切命令的結果變化。

比如實時顯示網絡流量:

hello@ubuntu:~$ watch -n 1 "/sbin/ifconfig eth0|grep bytes"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM