使用top檢視程序和系統負載資訊
引言
使用top命令,可以檢視正在執行的程序和系統負載資訊,包括cpu負載、記憶體使用、各個程序所佔系統資源等,top可以以一定頻率更新這些統計資訊。下面我們來學習top命令的具體使用方法。
預設輸出
top命令的預設輸出如下:
top - 08:27:48 up 21:43, 2 users, load average: 1.48, 1.47, 1.39 Tasks: 228 total, 2 running, 226 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 2.5%sy, 0.0%ni, 97.2%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 15945M total, 1726M used, 14219M free, 48M buffers Swap: 8197M total, 0M used, 8197M free, 1196M cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22 root 20 0 0 0 0 R 1.90.0 60:23.34 ksoftirqd/9 8689 root 20 0 273m 67m 11m S 0.0 0.4 2:04.01 java 11058 root 39 19 0 0 0 S 0.0 0.0 1:45.68 kipmi0 11771 root -98 0 20388 19m 7256 S 0.0 0.1 0:16.06 had 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
以上輸出上下分成兩部分,上半部分顯示了整體系統負載情況,各行含義如下:
- top一行
- Tasks一行:該行給出程序整體的統計資訊,包括統計週期內程序總數、執行狀態程序數、休眠狀態程序數、停止狀態程序數和僵死狀態程序數
- Cpu(s)一行:cpu整體統計資訊,包括使用者態下程序、系統態下程序佔用cpu時間比,nice值大於0的程序在使用者態下佔用cpu時間比,cpu處於idle狀態、wait狀態的時間比,以及處理硬中斷、軟中斷的時間比
- Mem一行:該行提供了記憶體統計資訊,包括實體記憶體總量、已用記憶體、空閒記憶體以及用作緩衝區的記憶體量
- Swap一行:虛存統計資訊,包括交換空間總量、已用交換區大小、空閒交換區大小以及用作快取的交換空間大小
下半部分顯示了各個程序的執行情況,各列含義如下:
- PID: 程序pid
- USER: 拉起程序的使用者
- PR: 該列值加100為程序優先順序,若優先順序小於100,則該程序為實時(real-time)程序,否則為普通(normal)程序,實時程序的優先順序更高,更容易獲得cpu排程,以上輸出結果中,java程序優先順序為120,是普通程序,had程序優先順序為2,為實時程序,migration 程序的優先順序RT對應於0,為最高優先順序
- NI: 程序的nice優先順序值,該列中,實時程序的nice值為0,普通程序的nice值範圍為-20~19
- VIRT: 程序所佔虛擬記憶體大小(預設單位kB)
- RES: 程序所佔實體記憶體大小(預設單位kB)
- SHR: 程序所佔共享記憶體大小(預設單位kB)
- S: 程序的執行狀態
- %CPU: 取樣週期內程序所佔cpu百分比
- %MEM: 取樣週期內程序所佔記憶體百分比
- TIME+: 程序使用的cpu時間總計
- COMMAND: 拉起程序的命令
top命令預設輸出提供了很多資訊,為獲取我們關注的資訊,可以使用top命令選項,也可以在top執行中使用快捷鍵過濾輸出資訊、根據cpu使用率等值對程序進行排序,下面給出具體使用例子。
對輸出結果進行排序
top輸出的下半部分有很多程序資訊列,我們可以根據這些列對程序輸出進行排序,預設情況下根據cpu使用率對程序排序。在top命令執行時,按”O”,可以看到排序項以及相應的按鍵:
Current Sort Field: K for window 1:Def Select sort field via field letter, type any other key to return a: PID = Process Id b: PPID = Parent Process Pid c: RUSER = Real user name d: UID = User Id ……
各項預設以從大到小排序,top執行中,按”R”可反向顯示輸出結果。
顯示特定使用者相關程序
在top執行時,按”u”快捷鍵,可以過濾出特定使用者拉起的程序:
Which user (blank for all): sshusr PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15561 sshusr 20 0 3700 356 276 R 8.3 0.0 5:26.05 a.out 15492 sshusr 20 0 81932 1868 1088 S 0.0 0.0 0:00.00 sash 15493 sshusr 20 0 13840 2872 1580 S 0.0 0.0 0:00.04 bash
執行top命令時,使用”top -u sshusr”可以起到相同效果。
顯示特定程序
執行top時,使用”-p”選項可以指定要顯示的程序:
# top -p 15561,15492 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15561 sshusr 20 0 3700 356 276 R 8.3 0.0 49:03.57 a.out 15492 sshusr 20 0 81932 1868 1088 S 0.0 0.0 0:00.00 sshd
顯示所有cpu核使用情況
預設情況下,top上半部分資源負載資訊中,顯示的是cpu整體的使用情況:
top - 10:33:33 up 23:49, 7 users, load average: 2.02, 2.12, 2.17 Tasks: 259 total, 3 running, 256 sleeping, 0 stopped, 0 zombie Cpu(s): 8.5%us, 2.4%sy, 0.0%ni, 88.9%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
按數字”1”快捷鍵,可以開啟/關閉顯示各個cpu核的資訊:
Cpu0 : 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 :100.0%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
更改top命令顯示頻率
預設情況下,top命令以3秒的頻率更新輸出結果,top命令執行時,按”d”可以更新top更新頻率:
Change delay from 3.0 to: 1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15561 sshusr 20 0 3700 356 276 R 8.2 0.0 65:53.58 a.out 26 root 20 0 0 0 0 R 2.8 0.0 106:13.28 ksoftirqd/11
執行top命令時,使用”-d”選項也可以指定top輸出跟新頻率。另外,按空格鍵,可以手動更新輸出。
顯示命令的全路徑和引數
top執行時,按”c”快捷鍵,將顯示命令的全路徑以及命令引數:
15561 sshusr 20 0 3700 356 276 R 8.3 0.0 73:40.02 ./a.out 11088 root 20 0 220m 7196 3000 S 0.5 0.0 78:48.42 /opt/HPI/HPI_ALARM/runHpiAlarm 11974 root 20 0 9252 3244 1844 S 0.0 0.0 0:51.01 /opt/VRTSvcs/bin/HostMonitor -type HostMonitor -agdir /
指定顯示的程序數目
top預設依據視窗大小顯示程序數,有時我們對程序排序後,只想關注排在前面的幾個程序,使用”-n”快捷鍵可以達到目的:
Maximum tasks = 0, change to (0 is unlimited): 2 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4 root 20 0 0 0 0 R 2.1 0.0 25:27.25 ksoftirqd/0 11088 root 20 0 220m 7196 3000 S 0.7 0.0 80:17.93 runHpiAlarm
在top中向程序傳送訊號
top執行時,按”k”快捷鍵,可向指定程序傳送訊號,預設訊號為SIGTERM,該訊號可中止程序:
PID to kill: 15561 Kill PID 15561 with signal [15]: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15561 sshusr 30 10 3700 356 276 R 8.2 0.0 95:33.45 a.out 18 root 20 0 0 0 0 R 2.8 0.0 41:48.24 ksoftirqd/7
更改程序的nice優先順序值
top執行時,按”r”快捷鍵,可以修改指定程序的nice優先順序:
PID to renice: 17898 Renice PID 17898 to value: 10 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 17898 sshusr 20 0 3700 356 276 R 8.3 0.0 0:03.96 a.out 4 root 20 0 0 0 0 R 2.0 0.0 25:51.30 ksoftirqd/0
儲存top配置
為看到我們關注的程序、資訊,用了很多快捷鍵,若下次執行top時,想要看到之前關心的內容,又要敲一遍快捷鍵,這相當不方便。使用”W”快捷鍵,可以把當前顯示配置儲存到~/.toprc檔案中。
例如以1秒的頻率檢視前10個佔用記憶體最多的程序,我們需要敲下列快捷鍵:
d: Change delay from 3.0 to: 1 n: Maximum tasks = 0, change to (0 is unlimited): 10 M: 快捷鍵”M”指示程序根據記憶體使用率從大到小排序
之後按下”W”可以對配置進行儲存:
W: Wrote configuration to '/root/.toprc'
退出再執行top命令,可以看到top以1秒的頻率檢視前10個佔用記憶體最多的程序,與我們之前儲存的配置相符。