程式管理
top
top 工具是我們常用的一個檢視工具,能實時的檢視我們系統的一些關鍵資訊的變化:
我們看到 top 顯示的第一排,
內容 | 解釋 |
---|---|
top | 表示當前程式的名稱 |
21:37:35 | 表示當前的系統的時間 |
up 141 days,17:23 | 表示該機器已經啟動了多長時間 |
1 user | 表示當前系統中只有一個使用者 |
load average: 1.40,1.37,1.32 | 分別對應 1、5、15 分鐘內 cpu 的平均負載 |
我們該如何看待這個 load average 資料呢?
假設我們的系統是單 CPU、單核心的,把它比喻成是一條單向的橋,把 CPU 任務比作汽車。
- load = 0 的時候意味著cpu 沒有任何任務;
- load < 1 的時候意味著,cpu 的任務並不多,資源還很充足;
- load = 1 的時候就意味著cpu 的已經在全力工作了,所有的資源都被用完了,當然還好,這還在能力範圍之內,只是有點慢而已;
- load > 1 的時候就意味著cpu 已經在全力工作,系統資源的用完了,但是還是有大量的程式在請求,在等待。若是這個值大於2、大於3,表示程式請求超過 CPU 工作能力的 2 到 3 倍。而若是這個值 > 5 說明系統已經在超負荷運作了。
top 的第二行資料,基本上第二行是程式的一個情況統計
內容 | 解釋 |
---|---|
Tasks: 26 total | 程式總數 |
1 running | 1 個正在執行的程式數 |
25 sleeping | 25 個睡眠的程式數 |
0 stopped | 沒有停止的程式數 |
0 zombie | 沒有殭屍程式數 |
top 的第三行資料,這一行基本上是 CPU 的一個使用情況的統計了
內容 | 解釋 |
---|---|
Cpu(s):31.8%us | 使用者空間程式佔用 CPU 百分比 |
1.0%sy | 核心空間執行佔用 CPU 百分比 |
0.0%ni | 使用者程式空間內改變過優先順序的程式佔用 CPU 百分比 |
66.3%id | 空閒 CPU 百分比 |
0.3%wa | 等待輸入輸出的 CPU 時間百分比 |
0.0%hi | 硬中斷(Hardware IRQ)佔用 CPU 的百分比 |
0.6%si | 軟中斷(Software IRQ)佔用 CPU 的百分比 |
0.0%st | (Steal time) 是 hypervisor 等虛擬服務中,虛擬 CPU 等待實際 CPU 的時間的百分比 |
top 的第四行資料,這一行基本上是記憶體的一個使用情況的統計
內容 | 解釋 |
---|---|
16425212 total | 實體記憶體總量 |
4906792 used | 使用的實體記憶體總量 |
705016 free | 空閒記憶體總量 |
10813404 buffers | 用作核心快取的記憶體量 |
系統中可用的實體記憶體最大值並不是 free 這個單一的值,而是 free + buffers + swap 中的 cached 的和
top 的第五行資料,這一行基本上是交換區的一個使用情況的統計
內容 | 解釋 |
---|---|
total | 交換區總量 |
used | 使用的交換區總量 |
free | 空閒交換區總量 |
cached | 緩衝的交換區總量,記憶體中的內容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆蓋 |
再下面就是程式的一個情況了
列名 | 解釋 |
---|---|
PID | 程式 id |
USER | 該程式的所屬使用者 |
PR | 該程式執行的優先順序 priority 值 |
NI | 該程式的 nice 值 |
VIRT | 該程式任務所使用的虛擬記憶體的總數 |
RES | 該程式所使用的實體記憶體數,也稱之為駐留記憶體數 |
SHR | 該程式共享記憶體的大小 |
S | 該程式程式的狀態: S=sleep R=running Z=zombie |
%CPU | 該程式 CPU 的利用率 |
%MEM | 該程式記憶體的利用率 |
TIME+ | 該程式活躍的總時間 |
COMMAND | 該程式執行的名字 |
top的常用互動命令
常用互動命令 | 解釋 |
---|---|
q | 退出程式 |
I | 切換顯示平均負載和啟動時間的資訊 |
P | 根據 CPU 使用百分比大小進行排序 |
M | 根據駐留記憶體大小進行排序 |
i | 忽略閒置和僵死的程式,這是一個開關式命令 |
k | 終止一個程式,系統提示輸入 PID 及傳送的訊號值。一般終止程式用 15 訊號,不能正常結束則使用 9 訊號。安全模式下該命令被遮蔽。 |
pstree
通過 pstree 可以很直接的看到相同的程式數量,最主要的還是我們可以看到所有程式之間的相關性。
$ pstree -up
#引數選擇:
#-A :各程式樹之間以 ASCII 字元來連線;
#-p :同時列出每個 process 的 PID;
#-u :同時列出每個 process 的所屬賬戶名稱。
ps
ps 也是我們最常用的檢視程式的工具
引數 | 解釋 |
---|---|
-a | 顯示所有終端機下執行的程式,除了階段作業領導者之外。 |
a | 顯示現行終端機下的所有程式,包括其他使用者的程式。 |
-A | 顯示所有程式。 |
-c | 顯示CLS和PRI欄位。 |
c | 列出程式時,顯示每個程式真正的指令名稱,而不包含路徑,引數或常駐服務的標示。 |
-C<指令名稱> | 指定執行指令的名稱,並列出該指令的程式的狀況。 |
-d | 顯示所有程式,但不包括階段作業領導者的程式。 |
-e | 此引數的效果和指定”A”引數相同。 |
e | 列出程式時,顯示每個程式所使用的環境變數。 |
-f | 顯示UID,PPIP,C與STIME欄位。 |
f | 用ASCII字元顯示樹狀結構,表達程式間的相互關係。 |
-g<群組名稱> | 此引數的效果和指定”-G”引數相同,當亦能使用階段作業領導者的名稱來指定。 |
g | 顯示現行終端機下的所有程式,包括群組領導者的程式。 |
-G<群組識別碼> | 列出屬於該群組的程式的狀況,也可使用群組名稱來指定。 |
h | 不顯示標題列。 |
-H | 顯示樹狀結構,表示程式間的相互關係。 |
-j或j | 採用工作控制的格式顯示程式狀況。 |
-l或l | 採用詳細的格式來顯示程式狀況。 |
L | 列出欄位的相關資訊。 |
-m或m | 顯示所有的執行緒。 |
n | 以數字來表示USER和WCHAN欄位。 |
-N | 顯示所有的程式,除了執行ps指令終端機下的程式之外。 |
-p<程式識別碼> | 指定程式識別碼,並列出該程式的狀況。 |
p<程式識別碼> | 此引數的效果和指定”-p”引數相同,只在列表格式方面稍有差異。 |
r | 只列出現行終端機正在執行中的程式。 |
-s<階段作業> | 指定階段作業的程式識別碼,並列出隸屬該階段作業的程式的狀況。 |
s | 採用程式訊號的格式顯示程式狀況。 |
S | 列出程式時,包括已中斷的子程式資料。 |
-t<終端機編號> | 指定終端機編號,並列出屬於該終端機的程式的狀況。 |
t<終端機編號> | 此引數的效果和指定”-t”引數相同,只在列表格式方面稍有差異。 |
-T | 顯示現行終端機下的所有程式。 |
-u<使用者識別碼> | 此引數的效果和指定”-U”引數相同。 |
u | 以使用者為主的格式來顯示程式狀況。 |
-U<使用者識別碼> | 列出屬於該使用者的程式的狀況,也可使用使用者名稱稱來指定。 |
U<使用者名稱稱> | 列出屬於該使用者的程式的狀況。 |
v | 採用虛擬記憶體的格式顯示程式狀況。 |
-V或V | 顯示版本資訊。 |
-w或w | 採用寬闊的格式來顯示程式狀況。 |
x | 顯示所有程式,不以終端機來區分。 |
X | 採用舊式的Linux |
-y | 配合引數”-l”使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位。 |
常用引數組合
$ ps aux
$ ps axjf
內容解釋
內容 | 解釋 |
---|---|
F | 程式的標誌(process flags),當 flags 值為 1 則表示此子程式只是 fork 但沒有執行 exec,為 4 表示此程式使用超級管理員 root 許可權 |
USER | 程式的擁有使用者 |
PID | 程式的 ID |
PPID | 其父程式的 PID |
SID | session 的 ID |
TPGID | 前臺程式組的 ID |
%CPU | 程式佔用的 CPU 百分比 |
%MEM | 佔用記憶體的百分比 |
NI | 程式的 NICE 值 |
VSZ | 程式使用虛擬記憶體大小 |
RSS | 駐留記憶體中頁的大小 |
TTY | 終端 ID |
S or STAT | 程式狀態 |
WCHAN | 正在等待的程式資源 |
START | 啟動程式的時間 |
TIME | 程式消耗 CPU 的時間 |
COMMAND | 命令的名稱和引數 |
狀態 | 解釋 |
---|---|
R | Running.執行中 |
S | Interruptible Sleep.等待呼叫 |
D | Uninterruptible Sleep.不可中斷睡眠 |
T | Stoped.暫停或者跟蹤狀態 |
X | Dead.即將被撤銷 |
Z | Zombie.殭屍程式 |
W | Paging.記憶體交換 |
N | 優先順序低的程式 |
< | 優先順序高的程式 |
s | 程式的領導者 |
L | 鎖定狀態 |
l | 多執行緒狀態 |
+ | 前臺程式 |
本作品採用《CC 協議》,轉載必須註明作者和本文連結