標籤:style blog http ar color 使用 sp strong 檔案
bash shell命令與監測的那點事之top
上次我們說到了ps命令,ps命令雖然在收集運行在系統上的進程資訊很有用,但是也有不足之處,ps命令只能顯示某個特定時間點的資訊,如果你想觀察頻繁換進換出記憶體的進程的趨勢,用ps的命令就不方便了。
而top命令剛好適用於這種情境。top命令跟ps命令相似,能夠顯示進程的資訊,但它是即時顯示的。是top命令輸出:
1 top - 16:56:13 up 120 days, 23:37, 3 users, load average: 0.00, 0.00, 0.002 Tasks: 389 total, 1 running, 388 sleeping, 0 stopped, 0 zombie3 Cpu(s): 1.4%us, 0.5%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st4 Mem: 3924432k total, 3744996k used, 179436k free, 144112k buffers5 Swap: 2097144k total, 1834356k used, 262788k free, 396948k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11629 root 20 0 15304 1484 952 R 1.6 0.0 0:04.29 top
輸出的第一部分顯示了系統的概況:第一行顯示了當前的時間、系統的已耗用時間、登入的使用者數以及系統的平均負載。
平均負載有三個值:最近1分鐘的、最近5分鐘的以及最近15分鐘的平均負載。值越大說明平均負載越高,最近1分鐘的負載值很高這很正常,因為有時候會有進程突然開始活動,但是如果最近15分鐘的平均負載都很高,就說明系統可能有問題了。
第二行顯示了概要的進程資訊——top命令的輸出中的進程叫任務(task):多少進程處於運行、休眠、停止或是僵化狀態。
下一行顯示了CPu資訊。top根據進程的屬主(使用者還是系統)和進程的狀態(運行、空閑、還是等待)將CPU利用率分成幾類輸出。
緊跟其後的兩行說明了系統記憶體的狀態。前行說的是系統的實體記憶體:總共多少記憶體,當前用了多少記憶體,還有多少空閑。後一行說的是同樣的資訊,不過是針對系統交換空間的狀態來說的。
最後一部分是運行中的進程的詳細列表——有些列和ps命令輸出類似。
- PID:進程的進程號。
- USER:進程的屬主名字。
- PR:進程的優先順序。
- NI:進程的謙讓度值。
- VIRT:進程佔用的虛擬記憶體總值。
- RES:進程佔用的實體記憶體總值。
- SHR:進程和其它進程共用的記憶體總量。
- S:進程的狀態(D代表可中斷的休眠狀態,R代表在啟動並執行狀態,S代表休眠狀態,T代表跟蹤狀態或者停止狀態,Z代表僵化狀態)。
- %CPU:進程使用的CPU時間比例。
- %MEM:進程使用的記憶體占可用記憶體的比例。
- TIME+:自進程啟動到目前為止的CPU時間總量。
- COMMAND:進程的命令名稱,也就是啟動的程式名。
預設情況下,top命令在啟動時會按照%CPU值來排序,你可以在top運行時用下面的互動式命令之一來重新排序。每個互動式命令都是單字元,在top命令運行時鍵入可以改變top的行為。命令如下表所示:
1 |
切換單CPU狀態模式和對稱處理器模式 |
B |
開啟/關閉表中重要數位加粗顯示 |
I |
切換Irix/Solaris模式 |
Z |
設定表的顏色 |
l |
顯示/關閉平均負載資訊行 |
t |
顯示/關閉CPU資訊行 |
m |
顯示/關閉MEM和SWAP行 |
f |
添加/移除輸出中的不同資訊列 |
o |
更改資訊行的顯示順序 |
F或O |
選擇一列來將進程排序 |
<或> |
將排序的行左移或右移一列 |
R |
切換正常排序還是倒序排序 |
H |
顯示/關閉顯示線程的情況 |
C |
切換顯示進程的命令,還是完整的命令列輸入 |
i |
切換是否顯示空閑進程 |
S |
切換顯示累計CPU時間還是相對CPU時間 |
x |
開啟/關閉高亮顯示排序列 |
y |
開啟/關閉高亮顯示運行中的任務 |
z |
切換彩色模式還是單色模式 |
b |
開啟/關閉x和y的高亮模式 |
u |
顯示某個使用者的進程 |
n或# |
設定要顯示的進程數 |
k |
結束指定的進程(必須是進程屬主或是root使用者) |
r |
改變指定進程的優先順序(必須是進程屬主或是root使用者) |
d或s |
改變更新的間隔(預設值是3s) |
W |
把當前設定寫到一個設定檔中 |
q |
退出top命令 |
結束進程
系統管理員很重要的一個技能就是知道何時以及如何結束一個進程。有時進程掛起了,只要有辦法對付一下讓進程重新運行或結束就行了。但有時,進程會耗盡CPU而且不釋放資源,此時就要kill掉進程了。
Linux沿用了Unix進行處理序間通訊的方法,在LInux上,進程間通過訊號通訊,下表列出了訊號代表的含義以及名稱:
訊號 |
名稱 |
描述 |
1 |
HUP |
掛起 |
2 |
INT |
中斷 |
3 |
QUIT |
結束運行 |
9 |
KILL |
無條件終止 |
11 |
SEGV |
段錯誤 |
15 |
TERM |
儘可能終止 |
17 |
STOP |
無條件停止運行,但不終止 |
18 |
TSTP |
停止或暫停,但繼續在後台運行 |
19 |
CONT |
在STOP或TSTP之後恢複運行 |
kill命令
kill命令可以通過PID給進程發訊號。預設情況下,kill命令會向命令列中列出的全部PID發送一個TERM訊號,遺憾的是只能用進程號而不能用命令名,所以有時候並不好用。
-s參數支援指定其他訊號(用訊號名或者訊號值)。kill命令不會有任何輸出。下面舉個栗子:
1 [[email protected] ~]# kill -s HUP 8080
它與下面的栗子等價:
1 kill -s 1 8080
killall命令
killall命令非常強大,它支援通過進程名而不是進程號來結束進程。killall命令也支援萬用字元,這在系統因負載過大而變得很慢時很有用:
killall http*
上面的栗子命令結束了所有以http開頭的進程,比如Apache Web伺服器的httpd服務。
bash shell命令與監測的那點事(二)