1. 程式人生 > >使用top檢視程序和系統負載資訊

使用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.9
0.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一行
    :從左到右依次為當前系統時間,系統執行的時間,系統在之前1min、5min和15min內cpu的平均負載值
  • 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個佔用記憶體最多的程序,與我們之前儲存的配置相符。