Linux書籤(02)用linux top命令自行監測和分析服務器CPU、內存、進程等性能

楔子: 學會靈活使用各種或工具或手段來監測自己的項目運行情況無疑是一種自我能力的提高。Linux top 命令也許會有所幫助。

Linux top 命令

 

Linux top 命令是服務器工程師和運維最常用的工具之一,它所帶出來的信息可以有效的觀察和監測當前服務器的各項性能,如系統CPU、內存、運行時間、執行的進程等信息,這可以實時有效的發現服務器運載能力或缺陷出在哪裏。如內存不夠、CPU處理能力不夠、IO讀寫過高等等。就像 Windows 的任務管理器。

[devuser@ping-test8264 logs]$ top
top - 14:36:45 up 12 days,  3:16,  1 user,  load average: 0.66, 0.67, 0.63
Tasks:  91 total,   1 running,  89 sleeping,   1 stopped,   0 zombie
Cpu(s): 40.3%us,  0.3%sy,  0.0%ni, 59.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2045940k total,  2027396k used,    18544k free,    87148k buffers
Swap:  1048572k total,     7472k used,  1041100k free,   110292k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                             
28132 ping      20   0 2927m 1.7g 6728 S 81.1 85.5 780:26.52 java                                                                
30846 root      20   0  323m  10m 3216 S  0.3  0.5  27:33.91 ops-agent                                                           
    1 root      20   0 19236 1252 1112 S  0.0  0.1   0:00.37 init                                                                
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                            
    3 root      RT   0     0    0    0 S  0.0  0.0   0:04.29 migration/0                                                         
    4 root      20   0     0    0    0 S  0.0  0.0   0:10.99 ksoftirqd/0                                                         
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0                                                           
    6 root      RT   0     0    0    0 S  0.0  0.0   0:02.32 watchdog/0                                                          
    7 root      RT   0     0    0    0 S  0.0  0.0   0:04.43 migration/1                                                         
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/1                                                           
    9 root      20   0     0    0    0 S  0.0  0.0   0:09.90 ksoftirqd/1                                                         
   10 root      RT   0     0    0    0 S  0.0  0.0   0:02.24 watchdog/1                                                          
   11 root      20   0     0    0    0 S  0.0  0.0   1:12.45 events/0                                                            
   12 root      20   0     0    0    0 S  0.0  0.0   1:20.05 events/1                                                            
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/0                                                            
   14 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/1                                                            
   15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/0                                                       
   16 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/1                                                       
   17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef                                                     
   18 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef                                                     
   19 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup                                                              
   20 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper                                                             
   21 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns                                                               
   22 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr                                                           
   23 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm                                                                  
   24 root      20   0     0    0    0 S  0.0  0.0   0:00.00 xenwatch                                                            
   25 root      20   0     0    0    0 S  0.0  0.0   0:01.69 xenbus                                                              
   26 root      20   0     0    0    0 S  0.0  0.0   0:05.78 sync_supers                                                         
   27 root      20   0     0    0    0 S  0.0  0.0   0:00.11 bdi-default                                                         
   28 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0                                                       
   29 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/1                                                       
   30 root      20   0     0    0    0 S  0.0  0.0   0:06.56 kblockd/0                                                           
   31 root      20   0     0    0    0 S  0.0  0.0   0:00.90 kblockd/1                                                           
   32 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_aux                                                             
   33 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_sff/0                                                           
   34 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_sff/1                                                           
   35 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksuspend_usbd                                                       
   36 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khubd                                                              

 

信息拆解

命令行:top 命令

[devuser@ping-test8264 logs]$ top

第一行:系統概覽

top - 14:36:45 up 12 days,  3:16,  1 user,  load average: 0.66, 0.67, 0.63

分別對應顯示:系統當前時間 up 系統到目前爲止運行的時間,當前登錄用戶數,以及負載均衡情況:

14:36:45

當前時間

up 12 days,  3:16

系統運行時間,格式爲時:分(系統當前已經運行了12天3小時16分鐘)

1 user

當前登錄用戶數

load average: 0.66, 0.67, 0.63

系統負載情況,即任務隊列的平均長度。 三個數值分別爲  1分鐘、5分鐘、15分鐘 前到現在的平均值

注意:load average 數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。

 

第二行:任務統計

Tasks:  91 total,   1 running,  89 sleeping,   1 stopped,   0 zombie

分別對應顯示:當前任務總數,前正在運行的任務數,當前正在休眠的任務數,當前已經停止的任務數,殭屍進程數

91 total

當前任務(進程)總數

1 running

當前正在運行的任務(進程)數

89 sleeping

當前正在休眠的任務(進程)數

1 stopped

當前已經停止的任務(進程)數

0 zombie

當前殭屍任務(進程)數

 

第三行:CPU狀態

Cpu(s): 40.3%us,  0.3%sy,  0.0%ni, 59.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

分別對應顯示:

40.3%us

用戶空間佔用CPU百分比

0.3%sy

內核空間佔用CPU百分比

0.0%ni

用戶進程空間內改變過優先級的進程佔用CPU百分比

59.4%id

空閒CPU百分比

0.0%wa

等待輸入輸出的CPU時間百分比

0.0%hi Hardware IRQ 硬中斷 佔用CPU的百分比
0.0%si Software 軟中斷 佔用CPU的百分比
0.0%st 被 hypervisor 偷去的時間(虛擬機佔用時間比例)

 

第四行:內存狀態

Mem:   2045940k total,  2027396k used,    18544k free,    87148k buffers

分別對應顯示:物理內存總量 2G,使用中的內存總量 2G,空閒內存總量 18M,緩衝內存量 85M

2045940k total

物理內存總量

2027396k used

使用的物理內存總量

18544k free

空閒內存總量

87148k buffers

用作內核緩存的內存量

注:使用中的內存總量(used)指的是現在系統內核控制的內存數,空閒內存總量(free)是內核還未納入其管控範圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重複利用的內存,內核並不把這些可被重新使用的內存交還到 free 中去,因此在 linux 上 free 內存會越來越少,但不用爲此擔心。

 

第五行:交換分區狀態

Swap:  1048572k total,     7472k used,  1041100k free,   110292k cached

分別對應顯示:交換區總量 1G,使用的交換區總量 7M,空閒交換區總量 1G,緩衝的交換區總量 0.1G

1048572k total

交換區總量

7472k used

使用的交換區總量

1041100k free

空閒交換區總量

110292k cached

緩衝的交換區總量。 內存中的內容被換出到交換區,而後又被換入到內存,但使用過的交換區尚未被覆蓋, 該數值即爲這些內容已存在於內存中的交換區的大小。相應的內存再次被換出時可不必再對交換區寫入。

注:對於內存監控,在 top 裏我們要時刻監控第五行 swap 交換分區的 used,如果這個數值在不斷的變化,說明內核在不斷進行內存和 swap 的數據交換,這是真正的內存不夠用了。

 

第六行:空行

 

第七行:各進程的監控表頭

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                         

對應表頭信息如下:

PID 進程唯一ID標識
USER 啓動此進程的用戶
PR 進程優先級
NI 進程nice值(與PR相加爲0,NI值越小進程優先級越高)
VIRT 進程使用的虛擬內存總量,單位kb
RES 進程使用的,未被換出的內存大小,單位kb
SHR 共享內存大小,單位kb
S 進程狀態(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=殭屍進程)
%CPU 進程佔用CPU資源比例
%MEM 進程佔用內存大小比例
TIME+ 進程佔用系統內核時間,單位1/100秒
COMMAND 進程名稱(命令名/命令行)

 

脫坑技巧

1)在使用 top 命令過程中,有時希望界面停止滾動來捕捉一些特定的進程信息,這時可以使用 ctrl+s 凍結屏幕,在得到我們需要的信息後按 ctrl+q 解除屏幕凍結。

2)監控 Java 線程數(如果不加後面的 wc -l 來只顯示當前 Java 線程個數,會很容易被刷屏):

ps -eLf | grep java | wc -l

3)命令 pmap,輸出某個進程內存的狀況,可以用來分析線程堆棧:

pmap PID

 

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