系統監控之top

簡介

top可以用來實時顯示linux系統的運行情況。

打印輸出

top命令輸出三個部分:

  1. 統計區 主要由統計任務、CPU、內存、交換區的信息
  2. 字段頭 任務的字段頭,標明字段的含義
  3. 任務區 每一行打印一個任務信息
## 統計區
top - 22:32:57 up 491 days,  3:21,  3 users,  load average: 0.03, 0.06, 0.01
Tasks: 384 total,   1 running, 383 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.2%us,  0.7%sy,  0.0%ni, 98.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  132118792k total, 120647324k used, 11471468k free,  2667992k buffers
Swap: 32767996k total,   919760k used, 31848236k free, 99993460k cached

## 字段頭
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                         
## 任務區
19305 KentZhan  20   0  258m  56m 7364 S  3.7  0.0 183:20.17 RtTeServer                  
50069 KentZhan  20   0 20136 1808 1208 R  1.9  0.0   0:00.02 top                              
    1 admin     20   0 24300 1320 1148 S  0.0  0.0   6:05.06 init                             
    2 admin     20   0     0    0    0 S  0.0  0.0   0:00.02 kthreadd                         
    3 admin     RT   0     0    0    0 S  0.0  0.0   0:50.61 migration/0                      
    4 admin     20   0     0    0    0 S  0.0  0.0  19:46.27 ksoftirqd/0                      
    5 admin     RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0  

含義說明

統計區

第一行:

top - 22:32:57 up 491 days,  3:21,  3 users,  load average: 0.03, 0.06, 0.01

當前系統時間是22:32:57,系統已經運行了491天3小時21分,目前有3個用戶登錄系統,最後的load average表示平均負載率,其後面的3個數字,分別代表1,5,15分鐘統計的平均負載率。

關於負載率,就是一定時間內任務使用CPU的百分比,例如計算1分鐘任務負載率:

load average = 所有任務使用CPU的時間/(1分鐘*CPU個數)

Tasks

Tasks: 384 total,   1 running, 383 sleeping,   0 stopped,   0 zombie

一共有384個任務,這個任務應該就是指線程,其中1個在運行中,其他383個都在休眠中,0個stopped狀態的進程,0個zombie狀態的進程,stopped狀態表示被跟蹤的進程,比如被gdb attach的進程,zombie表示殭屍進程。

Cpu

Cpu(s):  1.2%us,  0.7%sy,  0.0%ni, 98.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

us 表示用戶空間中佔用CPU百分比

sy 表示內核空間中佔用CPU百分比

id 表示CPU空閒狀態的時間百分比

wa 表示IO等待佔用時間百分比

其他的幾個,暫時沒用到,待補充。

Mem

Mem:  132118792k total, 120647324k used, 11471468k free,  2667992k buffers

總共物理內存:132118792k

已經使用內存:120647324k

空閒的內存:11471468k

buffers內存:2667992k 這個內存其實是包含在已使用的內存中的。

Swap

Swap: 32767996k total,   919760k used, 31848236k free, 99993460k cached

關於交換的區的機制,我還不是很熟悉,後續研究補充。

字段頭

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

PID 進程ID

user 執行進程的用戶

PR 優先級

NI nice值,和優先級相關

VIRT 進程使用的虛擬內存大小

RES 進程使用的、未被換出的物理內存大小

SHR 共享內存大小

S 進程狀態,有R、S、T、D、Z

%CPU CPU佔用率

%MEM 內存佔有率

TIME+ 進程一共使用CPU時間的大小

COMMAND 啓動進程的命令行

任務區

19305 KentZhan  20   0  258m  56m 7364 S  3.7  0.0 183:20.17 RobotTexasServe                  
50069 KentZhan  20   0 20136 1808 1208 R  1.9  0.0   0:00.02 top                              
    1 admin     20   0 24300 1320 1148 S  0.0  0.0   6:05.06 init                             
    2 admin     20   0     0    0    0 S  0.0  0.0   0:00.02 kthreadd                         
    3 admin     RT   0     0    0    0 S  0.0  0.0   0:50.61 migration/0                      
    4 admin     20   0     0    0    0 S  0.0  0.0  19:46.27 ksoftirqd/0                      
    5 admin     RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0  
    ## 這裏不再解釋

其他操作技巧

只監控某個進程

top -p $PID	
[KentZhang@LOCAL-192-168-97-2 ~]$ top -p 19305
top - 23:32:51 up 491 days,  4:21,  3 users,  load average: 0.08, 0.06, 0.01
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.3%sy,  0.0%ni, 99.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  132118792k total, 120680696k used, 11438096k free,  2668112k buffers
Swap: 32767996k total,   919760k used, 31848236k free, 100033744k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                         
19305 KentZhan  20   0  258m  56m 7364 S  2.0  0.0 184:42.73 RtTeServer                 

顯示單個Cpu的統計信息

執行top後,按 1

可以清楚的看到每個CPU的使用情況。

[KentZhang@LOCAL-192-168-97-2 ~]$ top 
top - 23:36:20 up 491 days,  4:25,  3 users,  load average: 0.10, 0.09, 0.02
Tasks: 380 total,   1 running, 379 sleeping,   0 stopped,   0 zombie
Cpu0  :  3.3%us,  1.0%sy,  0.0%ni, 95.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  1.0%us,  1.3%sy,  0.0%ni, 97.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.7%us,  0.7%sy,  0.0%ni, 98.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.7%us,  1.3%sy,  0.0%ni, 98.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.7%us,  0.7%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  132118792k total, 120682656k used, 11436136k free,  2668112k buffers
Swap: 32767996k total,   919760k used, 31848236k free, 100034680k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                         
19305 KentZhan  20   0  258m  56m 7364 S  2.3  0.0 184:47.57 RtServer                  
45304 admin     20   0 2954m  56m  12m S  1.0  0.0   4143:26 java 

改變排序方式

在任務區默認是按CPU百分比的大小進行排序的,可以改變排序方式。

使用 “shift + >” 或者 “shift + <” 左右移動字段的排序方式。

顯示完整的命令

默認command字段只顯示進程的文件名,或者命令行名,不是完整的執行命令。

top -c  ## 顯示完整的命令	
[KentZhang@LOCAL-192-168-97-2 ~]$ top -c
top - 23:43:46 up 491 days,  4:32,  3 users,  load average: 0.12, 0.08, 0.01
Tasks: 381 total,   2 running, 379 sleeping,   0 stopped,   0 zombie
Cpu(s):  4.9%us,  1.3%sy,  0.0%ni, 93.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  132118792k total, 120684588k used, 11434204k free,  2668112k buffers
Swap: 32767996k total,   919760k used, 31848236k free, 100034984k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                         
64228 admin     20   0  662m  20m 4300 S 40.7  0.0 149:47.29 /usr/local/python2714/bin/python 
19477 WwwCron   20   0  232m  13m 8144 S  1.7  0.0   0:00.09 /usr/local/php/bin/php /data/wwwr
19504 admin     20   0  158m 3452 2716 R  1.0  0.0   0:00.03 sudo /data/zabbix/bin/PartitionWr
18027 KentZhan  20   0 20284 2092 1324 R  0.7  0.0   0:01.31 top -c    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章