簡介
top可以用來實時顯示linux系統的運行情況。
打印輸出
top命令輸出三個部分:
- 統計區 主要由統計任務、CPU、內存、交換區的信息
- 字段頭 任務的字段頭,標明字段的含義
- 任務區 每一行打印一個任務信息
## 統計區
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