一 ps命令
1 描述
該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有殭屍、哪些進程佔用了過多的資源等等。ps命令最常用的還是用於監控後臺進程的工作情況,因爲後臺進程是不和屏幕鍵盤這些標準輸入/輸出設備進行通信的,所以如果需要檢測其情況,便可以使用ps命令了。
ps是顯示瞬間進程的狀態,並不動態連續;如果想對進程進行實時監控應該用top命令。
2 主要參數
常見參數:
參數 | 作業 |
---|---|
a | 列出終端相關的,如果想列出所有進程需要配合x |
u | 顯示面向用戶的格式 |
x | 列出終端先關的,如果列出所有進程需要配合a |
f | 顯示進程樹,這個顯示效果跟pstree的效果差遠啦 |
k | 根據指定指標去排序 |
–sort | 根據指定指標去排序,%cpu以cpu佔用排序,-%cpu反序排 |
o | 設置顯示的列 |
L | 顯示支持的屬性列表 |
-C | 指定命令,多個命令用,分割 |
-L | 顯示線程 |
-u | 指定有效用戶ID或名稱 |
-U | 指定真正的用戶ID或名稱 |
-p | 顯示指定pid進程 |
–pid | 顯示屬於pid的子進程 |
–forest | 樹型顯示 |
最常用的有ps -ef
和ps aux
。這兩個到底有什麼區別呢?兩者沒太大差別,討論這個問題,要追溯到Unix系統中的兩種風格,System V風格和BSD 風格,ps aux
最初用到Unix Style中,而ps -ef
被用在System V Style中,兩者輸出略有不同。現在的大部分Linux系統都是可以同時使用這兩種方式的。這個命令比較特殊,支持了三種風格:
- Unix選項:使用1個-
- BSD選項:選項不使用-
- GNU長選項:選項使用2個-
3 ps -ef
ps -ef
是用標準的格式顯示進程的、其格式如下:
名稱 | 內容 |
---|---|
UID | 用戶ID、但輸出的是用戶名 |
PID | 進程的ID |
PPID | 父進程ID |
C | 進程佔用CPU的百分比 |
STIME | 進程啓動到現在的時間 |
TTY | 該進程在那個終端上運行,若與終端無關,則顯示? 若爲pts/0等,則表示由網絡連接主機進程。 |
CMD | 命令的名稱和參數 |
4 ps aux
ps aux
用BSD的格式來顯示、其格式如下:
名稱 | 內容 |
---|---|
USER | 用戶名 |
PID | 進程的ID |
%CPU | 進程佔用的CPU百分比 |
%MEM | 佔用內存的百分比 |
VSZ | 該進程使用的虛擬內存量(KB) |
RSS | 該進程佔用的固定內存量(KB)(駐留中頁的數量) |
STAT | 進程的狀態 |
START | 該進程被觸發啓動時間 |
TIME | 該進程實際使用CPU運行的時間 |
其中STAT狀態位常見的狀態字符有:
名稱 | 內容 |
---|---|
D | 無法中斷的休眠狀態(通常 IO 的進程); |
R | 正在運行可中在隊列中可過行的; |
S | 處於休眠狀態; |
T | 停止或被追蹤; |
W | 進入內存交換 (從內核2.6開始無效); |
X | 死掉的進程 (基本很少見); |
Z | 殭屍進程; |
< | 優先級高的進程 |
N | 優先級較低的進程 |
L | 有些頁被鎖進內存; |
s | 進程的領導者(在它之下有子進程); |
l | 多線程,克隆線程(使用 CLONE_THREAD, 類似 NPTL pthreads); |
+ | 位於後臺的進程組 |
5 用例
- 查看所有進程的命令,進程id,cpu佔用,內存佔用信息 ,並按照cpu佔用排序:
ps axo cmd,pid,%cpu,%mem k %cpu
- 查看指定終端的進程:
ps -t pts/3
- 查看指定終端的進程:
ps -t pts/3
二 top命令
1 概述
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器。
2 功能說明
第一行,任務隊列信息,同 uptime 命令的執行結果。
系統時間:19:27:01
運行時間:up 54 min
當前登錄用戶:1 user
負載均衡(uptime) load average: 0.02, 0.03, 0.00,average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。
load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
第二行,Tasks — 任務(進程)
總進程:159 total, 運行:1 running, 休眠:157 sleeping, 停止: 1 stopped, 殭屍進程: 0 zombie
第三行,cpu狀態信息
0.0%us【user space】— 用戶空間佔用CPU的百分比。
0.1%sy【sysctl】— 內核空間佔用CPU的百分比。
0.0%ni【】— 改變過優先級的進程佔用CPU的百分比。
99.9%id【idolt】— 空閒CPU百分比。
0.0%wa【wait】— IO等待佔用CPU的百分比。
0.0%hi【Hardware IRQ】— 硬中斷佔用CPU的百分比。
0.0%si【Software Interrupts】— 軟中斷佔用CPU的百分比。
第四行,內存狀態。
1012288k total, 234464k used, 777824k free, 24084k buffers【緩存的內存量】
第五行,swap交換分區信息。
614396k total, 0k used, 614396k free, 72356k cached【緩衝的交換區總量】
備註:可用內存=free + buffer + cached,對於內存監控,在top裏我們要時刻監控第五行swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,第四行中空閒內存總量(free)是內核還未納入其管控範圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重複利用的內存,內核並不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用爲此擔心。
第六行,空行。
第七行以下:各進程(任務)的狀態監控。
名稱 | 含義 |
---|---|
PID | 進程id |
USER | 進程所有者 |
PR | 進程優先級 |
NI | nice值。負值表示高優先級,正值表示低優先級 |
VIRT | virtual memory usage 虛擬內存,單位kb。VIRT=SWAP+RES 1、進程“需要的”虛擬內存大小,包括進程使用的庫、代碼、數據等 2、假如進程申請100m的內存,但實際只使用了10m,那麼它會增長100m,而不是實際的使用量 |
RES | resident memory usage 常駐內存,單位kb。RES=CODE+DATA 1、進程當前使用的內存大小,但不包括swap out 2、包含其他進程的共享 3、如果申請100m的內存,實際使用10m,它只增長10m,與VIRT相反 4、關於庫佔用內存的情況,它只統計加載的庫文件所佔內存大小 |
SHR | shared memory 共享內存,單位kb 1、除了自身進程的共享內存,也包括其他進程的共享內存 2、雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小 3、計算某個進程所佔的物理內存大小公式:RES – SHR 4、swap out後,它將會降下來 |
S | 進程狀態。D:不可中斷的睡眠狀態,R:運行,S:睡眠,T:跟蹤/停止,Z:殭屍進程 |
%CPU | 上次更新到現在的CPU時間佔用百分比 |
%MEM | 進程使用的物理內存百分比 |
TIME+ | 進程使用的CPU時間總計,單位1/100秒 |
COMMAND | 進程名稱(命令名/命令行) |
3 其他使用技巧
- 多U多核CPU監控:在top基本視圖中,按鍵盤數字“1”,可監控每個邏輯CPU的狀況。
- 高亮顯示當前運行進程:敲擊鍵盤“b”(打開/關閉加亮效果),“top”進程被加亮了,可以通過敲擊“y”鍵關閉或打開運行態進程的加亮效果。
- 進程字段排序:默認進入top時,各進程是按照CPU的佔用量來排序的,敲擊鍵盤“x”(打開/關閉排序列的加亮效果)。
- 通過”shift + >”或”shift + <”可以向右或左改變排序列:按一次”shift + >”的效果圖,視圖現在已經按照%MEM來排序,再按一次按時間排。
- top交互命令。
命令 | 作用 |
---|---|
h | 顯示幫助畫面,給出一些簡短的命令總結說明 |
k | 終止一個進程。 |
i | 忽略閒置和僵死進程。這是一個開關式命令。 |
q | 退出程序 |
r | 重新安排一個進程的優先級別 |
S | 切換到累計模式 |
s | 改變兩次刷新之間的延遲時間(單位爲s) |
f或者F | 從當前顯示中添加或者刪除項目 |
o或者O | 改變顯示項目的順序 |
l | 關閉或開啓第一部分第一行 top 信息的表示 |
m | 關閉或開啓第一部分第四行 Mem 和 第五行 Swap 信息的表示 |
t | 關閉或開啓第一部分第二行 Tasks 和第三行 Cpus 信息的表示 |
c | 切換顯示命令名稱和完整命令行 |
M | 根據駐留內存大小進行排序 |
N | 以 PID 的大小的順序排列表示進程列表 |
P | 根據CPU使用百分比大小進行排序 |
T | 根據時間/累計時間進行排序 |
W | 將當前設置寫入~/.toprc文件中 |
4 常用顯示命令
顯示完整命令:top -c
設置信息更新次數:top -n 2
【表示更新兩次後終止更新顯示】
設置信息更新時間:top -d 3
【表示更新週期爲3秒】
1、實時性:ps命令是系統在過去執行的進程的靜態快照;top命令反應的是系統進程動態信息,默認3s更新一次,可以用ps -d指定屏幕刷新的延遲時間。2、交互性:允許用戶輸入控制命令,比如在top命令的模式下輸入n5,就顯示如圖的此時的5個最活躍的進程,top會持續運行直到用戶按下"q",退出top