Linux 學習筆記--程式管理

WormOfTime發表於2020-04-13

程式管理

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 的所屬賬戶名稱。

Linux 學習筆記--程式管理

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

Linux 學習筆記--程式管理

$ ps axjf

Linux 學習筆記--程式管理

內容解釋

內容 解釋
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 協議》,轉載必須註明作者和本文連結

相關文章