1. 程式人生 > >linux ps與top 命令下wa,hi,si,st等及 VSZ,RSS,VIRT,RES,等關鍵字含義詳解!

linux ps與top 命令下wa,hi,si,st等及 VSZ,RSS,VIRT,RES,等關鍵字含義詳解!

Linux中ps與top命令
這兩個命令都是檢視系統程序資訊的命令,但是用處有點兒不同


一:.ps命令–提供系統過去資訊的一次性快照
也就是說ps命令能夠檢視剛剛系統的程序資訊  命令:ps aux或者ps lax
[[email protected] ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.1   2032   644 ?        Ss   21:55   0:01 init [3]
root         2  0.0  0.0      0     0 ?        S    21:55   0:00 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   21:55   0:00 [ksoftirqd/0]
……
解釋如下:
VSZ–程序的虛擬大小
RSS–駐留集的大小,可以理解為記憶體中頁的數量
TTY–控制終端的ID
STAT–也就是當前程序的狀態,其中S-睡眠,s-表示該程序是會話的先導程序,N-表示程序擁有比普通優先順序更低的優先順序,R-正在執行,D-短期等待,Z-僵死程序,T-被跟蹤或者被停止等等
STRAT–這個很簡單,就是該程序啟動的時間
TIME–程序已經消耗的CPU時間,注意是消耗CPU的時間
COMMOND–命令的名稱和引數
而]#ps lax  可以看到父程序,謙讓值以及該程序正在等待的資源等待

 

VIRT:virtual memory usage 虛擬記憶體
1、程序“需要的”虛擬記憶體大小,包括程序使用的庫、程式碼、資料等
2、假如程序申請100m的記憶體,但實際只使用了10m,那麼它會增長100m,而不是實際的使用量

RES:resident memory usage 常駐記憶體
1、程序當前使用的記憶體大小,但不包括swap out
2、包含其他程序的共享
3、如果申請100m的記憶體,實際使用10m,它只增長10m,與VIRT相反
4、關於庫佔用記憶體的情況,它只統計載入的庫檔案所佔記憶體大小

SHR:shared memory 共享記憶體
1、除了自身程序的共享記憶體,也包括其他程序的共享記憶體
2、雖然程序只使用了幾個共享庫的函式,但它包含了整個共享庫的大小
3、計算某個程序所佔的實體記憶體大小公式:RES – SHR
4、swap out後,它將會降下來

DATA
1、資料佔用的記憶體。如果top沒有顯示,按f鍵可以顯示出來。
2、真正的該程式要求的資料空間,是真正在執行中要使用的。

 


二:.top命令–這個命令就很有用了
top命令反應的是系統程序動態資訊,預設10s更新一次
[[email protected] ~]#top
top – 12:17:59 up 1:24, 3 users, load average: 0.06, 0.04, 0.00
Tasks: 88 total,   2 running, 86 sleeping,   0 stopped,   0 zombie
Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si
Mem:   1024180k total,   537708k used,   486472k free,    56528k buffers
Swap:        0k total,        0k used,        0k free,   255732k cached
PID USER      PR NI VIRT RES SHR S %CPU %MEM    TIME+ COMMAND
1 root      16   0 1980 544 468 S 0.0 0.1   0:01.43 init
2 root      RT   0     0    0    0 S 0.0 0.0   0:00.00 migration/0
3 root      34 19     0    0    0 S 0.0 0.0   0:00.00 ksoftirqd/0
4 root       5 -10     0    0    0 S 0.0 0.0   0:00.06 events/0
統計資訊區
前五行是系統整體的統計資訊。第一行是任務佇列資訊,同 uptime 命令的執行結果。其內容如下:
12:17:59 當前時間
up 1:24 系統執行時間,格式為時:分
3 user 當前登入使用者數
load average: 0.06, 0.04, 0.00 系統負載,即任務佇列的平均長度。
三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。
第二、三行為程序和CPU的資訊。當有多個CPU時,這些內容可能會超過兩行。內容如下:
Tasks: 88 total #程序總數
2 running #正在執行的程序數
86 sleeping #睡眠的程序數
0 stopped 停止的程序數
0 zombie #殭屍程序數
Cpu(s): 0.0% us #使用者空間佔用CPU百分比
0.0% sy #核心空間佔用CPU百分比
0.0% ni #使用者程序空間內改變過優先順序的程序佔用CPU百分比
100.0 id #空閒CPU百分比
0.0% wa #等待輸入輸出的CPU時間百分比
0.0% hi #硬體中斷
0.0% si #軟體中斷
最後兩行為記憶體資訊。內容如下:
Mem: 1024180k total 實體記憶體總量
537708k used 使用的實體記憶體總量
486472k free 空閒記憶體總量
56528k buffers 用作核心快取的記憶體量
Swap: 0k total 交換區總量
0k used 使用的交換區總量
0k free 空閒交換區總量
255732k cached 緩衝的交換區總量。
記憶體中的內容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆蓋,
該數值即為這些內容已存在於記憶體中的交換區的大小。
相應的記憶體再次被換出時可不必再對交換區寫入。
程序資訊區
統計資訊區域的下方顯示了各個程序的詳細資訊。首先認識一下各列的含義。
 序號  
列名
含義
PID : 程序id
PPID : 父程序id
RUSER : Real user name
UID : 程序所有者的使用者id
USER : 程序所有者的使用者名稱
GROUP : 程序所有者的組名
TTY : 啟動程序的終端名。不是從終端啟動的程序則顯示為 ?
PR : 優先順序
NI : nice值。負值表示高優先順序,正值表示低優先順序
P : 最後使用的CPU,僅在多CPU環境下有意義
%CPU : 上次更新到現在的CPU時間佔用百分比
TIME : 程序使用的CPU時間總計,單位秒
TIME+ : 程序使用的CPU時間總計,單位1/100秒
%MEM : 程序使用的實體記憶體百分比
VIRT : 程序使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
SWAP : 程序使用的虛擬記憶體中,被換出的大小,單位kb。
RES : 程序使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA
CODE : 可執行程式碼佔用的實體記憶體大小,單位kb
DATA : 可執行程式碼以外的部分(資料段+棧)佔用的實體記憶體大小,單位kb
SHR : 共享記憶體大小,單位kb
nFLT : 頁面錯誤次數
nDRT : 最後一次寫入到現在,被修改過的頁面數。
S : 程序狀態。D=不可中斷的睡眠狀態 R=執行 S=睡眠 T=跟蹤/停止 Z=殭屍程序
COMMAND : 命令名/命令列
WCHAN : 若該程序在睡眠,則顯示睡眠中的系統函式名
Flags : 任務標誌,參考 sched.h
預設情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過下面的快捷鍵來更改顯示內容。 更改顯示內容通過 f 鍵可以選擇顯示的內容。按 f 鍵之後會顯示列的列表,

可通過移動上下鍵來選擇需要顯示的關鍵資訊  按下空格鍵即可選中 ,而後退出即可顯示

   注: 顯示時只會顯示前十二個選中的關鍵字資訊

 也可按 a-z 即可顯示或隱藏對應的列,最後按回車鍵確定。按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應的列向右移動,而大寫的 A-Z 可以將相應的列向左移動。最後按回車鍵確定。按大寫的 F 或 O 鍵,然後按 a-z 可以將程序按照相應的列進行排序。而大寫的 R 鍵可以將當前的排序倒轉。

序號 列名 含義
a PID 程序id
b PPID 父程序id
c RUSER Real user name
d UID 程序所有者的使用者id
e USER 程序所有者的使用者名稱
f GROUP 程序所有者的組名
g TTY 啟動程序的終端名。不是從終端啟動的程序則顯示為 ?
h PR 優先順序
i NI nice值。負值表示高優先順序,正值表示低優先順序
j P 最後使用的CPU,僅在多CPU環境下有意義
k %CPU 上次更新到現在的CPU時間佔用百分比
l TIME 程序使用的CPU時間總計,單位秒
m TIME+ 程序使用的CPU時間總計,單位1/100秒
n %MEM 程序使用的實體記憶體百分比
o VIRT 程序使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
p SWAP 程序使用的虛擬記憶體中,被換出的大小,單位kb。
q RES 程序使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA
r CODE 可執行程式碼佔用的實體記憶體大小,單位kb
s DATA 可執行程式碼以外的部分(資料段+棧)佔用的實體記憶體大小,單位kb
t SHR 共享記憶體大小,單位kb
u nFLT 頁面錯誤次數
v nDRT 最後一次寫入到現在,被修改過的頁面數。
w S 程序狀態。(D=不可中斷的睡眠狀態,R=執行,S=睡眠,T=跟蹤/停止,Z=殭屍程序)
x COMMAND 命令名/命令列
y WCHAN 若該程序在睡眠,則顯示睡眠中的系統函式名
z Flags 任務標誌,參考 sched.h

 

命令使用

1. 工具(命令)名稱
top
2.工具(命令)作用
顯示系統當前的程序和其他狀況; top是一個動態顯示過程,即可以通過使用者按鍵來不斷重新整理當前狀態.如果在前臺執行該命令,它將獨佔前臺,直到使用者終止該程式為止. 比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.記憶體使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過互動式命令或者在個人定製檔案中進行設定.
3.環境設定
在Linux下使用。
4.使用方法
4.1使用格式
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
4.2引數說明
 
d
指定每兩次螢幕資訊重新整理之間的時間間隔。當然使用者可以使用s互動命令來改變之。
p
通過指定監控程序ID來僅僅監控某個程序的狀態。
q
該選項將使top沒有任何延遲的進行重新整理。如果呼叫程式有超級使用者許可權,那麼top將以儘可能高的優先順序執行。
S
指定累計模式
s
使top命令在安全模式中執行。這將去除互動命令所帶來的潛在危險。
i
使top不顯示任何閒置或者僵死程序。
c
顯示整個命令列而不只是顯示命令名
4.3其他
下面介紹在top命令執行過程中可以使用的一些互動命令。從使用角度來看,熟練的掌握這些命令比掌握選項還重要一些。這些命令都是單字母的,如果在命令列選項中使用了s選項,則可能其中一些命令會被遮蔽掉。
Ctrl+L
擦除並且重寫螢幕。
c
切換顯示命令名稱和完整命令列。
f或者F
從當前顯示中新增或者刪除專案。
h或者?
顯示幫助畫面,給出一些簡短的命令總結說明。
i
忽略閒置和僵死程序。這是一個開關式命令。
k
終止一個程序。系統將提示使用者輸入需要終止的程序PID,以及需要傳送給該程序什麼樣的訊號。一般的終止程序可以使用15訊號;如果不能正常結束那就使用訊號9強制結束該程序。預設值是訊號15。在安全模式中此命令被遮蔽。
l
切換顯示平均負載和啟動時間資訊,及關閉或開啟第一部分第一行 top 資訊的表示
m
切換顯示記憶體資訊,及關閉或開啟第一部分第四行 Mem 和 第五行 Swap 資訊的表示
M
以記憶體佔用率大小的順序排列程序列表。
n
設定在程序列表所顯示程序的數量
N
以 PID 的大小的順序排列表示程序列表
o或者O
改變顯示專案的順序。
P
以 CPU 佔用率大小的順序排列程序列表。
q
退出程式。
r
重新安排一個程序的優先級別。系統提示使用者輸入需要改變的程序PID以及需要設定的程序優先順序值。輸入一個正值將使優先順序降低,反之則可以使該程序擁有更高的優先權。預設值是10。
s
改變畫面更新週期,改變兩次重新整理之間的延遲時間。系統將提示使用者輸入新的時間,單位為s。如果有小數,就換算成m s。輸入0值則系統將不斷重新整理,預設值是5 s。需要注意的是如果設定太小的時間,很可能會引起不斷重新整理,從而根本來不及看清顯示的情況,而且系統負載也會大大增加。
S
切換到累計模式。
t
切換顯示程序和CPU狀態資訊,及關閉或開啟第一部分第二行 Tasks 和第三行 Cpus 資訊的表示
T
根據時間/累計時間進行排序。
W
將當前設定寫入~/.toprc檔案中。

 

ps和top都是從/proc目錄下讀取程序的狀態資訊,核心把當前系統程序的各種有用資訊都放在這個偽目錄下。

Linux檢視程序/子程序/執行緒資訊

檢視程序ID:

[[email protected] data]# ps -ef | grep mysqld | grep -v "grep"

root      3988     1  0 Feb20 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql

mysql     4256  3988  2 Feb20 ?        01:08:10 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/QLB.err --pid-file=/usr/local/mysql/data/QLB.pid --socket=/tmp/mysqld.sock --port=3306
檢視某個程序的所有執行緒:
[[email protected] data]# ps mp 4256 -o THREAD,tid
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID
mysql     2.5   -    - -         -      -     -
mysql     0.0  24    - -         -      -  4256
mysql     0.0  14    - futex_    -      -  4258
mysql     0.0  23    - futex_    -      -  4259
mysql     0.0  24    - futex_    -      -  4260
mysql     0.0  24    - futex_    -      -  4261
mysql     0.0  23    - futex_    -      -  4262
mysql     0.0  24    - futex_    -      -  4263
mysql     0.0  24    - futex_    -      -  4264
mysql     0.0  24    - futex_    -      -  4265
mysql     0.0  24    - futex_    -      -  4266
mysql     0.0  24    - futex_    -      -  4267
mysql     0.0  24    - futex_    -      -  4269
mysql     0.0  24    - futex_    -      -  4270
mysql     0.0  21    - futex_    -      -  4271
mysql     0.0  24    - futex_    -      -  4272
mysql     0.0  20    - -         -      -  4273
檢視程序樹:
[[email protected] data]# pstree -p 3988
mysqld_safe(3988)───mysqld(4256)─┬─{mysqld}(4258)
                                 ├─{mysqld}(4259)
                                 ├─{mysqld}(4260)
                                 ├─{mysqld}(4261)
                                 ├─{mysqld}(4262)
                                 ├─{mysqld}(4263)
                                 ├─{mysqld}(4264)
                                 ├─{mysqld}(4265)
                                 ├─{mysqld}(4266)
                                 ├─{mysqld}(4267)
                                 ├─{mysqld}(4269)
                                 ├─{mysqld}(4270)
                                 ├─{mysqld}(4271)
                                 ├─{mysqld}(4272)
                                 └─{mysqld}(4273)
檢視某個程序的狀態資訊:
[[email protected] data]# cat /proc/4256/status
Name:    mysqld
State:    S (sleeping)
SleepAVG:    98%
Tgid:    4256
Pid:    4256
PPid:    3988
TracerPid:    0
Uid:    102    102    102    102
Gid:    501    501    501    501
FDSize:    512
Groups:    501 
VmPeak:      410032 kB
VmSize:      410032 kB
VmLck:           0 kB
VmHWM:      204356 kB
VmRSS:      199920 kB
VmData:      372332 kB
VmStk:          88 kB
VmExe:        8720 kB
VmLib:        3544 kB
VmPTE:         608 kB
StaBrk:    0ed3d000 kB
Brk:    136ae000 kB
StaStk:    7fff2268a570 kB
Threads:    16
SigQ:    0/69632
SigPnd:    0000000000000000
ShdPnd:    0000000000000000
SigBlk:    0000000000087007
SigIgn:    0000000000001006
SigCgt:    00000001800066e9
CapInh:    0000000000000000
CapPrm:    0000000000000000
CapEff:    0000000000000000
Cpus_allowed:    00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f
Mems_allowed:    00000000,00000001
Linux User’s Manual上的ps的使用例子:
1. To see every process on the system using standard syntax:
ps -e
ps -ef
ps -eF
ps -ely
2. To see every process on the system using BSD syntax:
ps ax
ps axu
3. To print a process tree:
ps -ejH
ps axjf
4. To get info about threads:
ps -eLf
ps axms
5. To get security info:
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM
6. To see every process running as root (real & effective ID) in user format:
ps -U root -u root u
7. To see every process with a user-defined format:
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -eopid,tt,user,fname,tmout,f,wchan
8. Print only the process IDs of syslogd:
ps -C syslogd -o pid=
9. Print only the name of PID 42:
ps -p 42 -o comm=
Posted in Linux/Unix. 
Comments are closed.
首先,得到程序的pid:
ps -ef | grep process_name | grep -v “grep” | awk ‘{print $2}’
檢視程序的所有執行緒
# ps mp 6648 -o THREAD,tid
USER %CPU PRI SCNT WCHAN USER SYSTEM TID
root 0.0 – - – - – -
root 0.0 24 – - – - 6648
root 0.0 21 – - – - 6650
root 1.0 24 – - – - 14214
root 0.0 23 – futex_ – - 14216
root 0.0 22 – 184466 – - 15374
root 0.0 23 – 184466 – - 15376
root 0.0 23 – 184466 – - 15378
root 0.0 23 – 184466 – - 15380
root 0.0 23 – 184466 – - 15392
root 0.0 23 – 184466 – - 15394
root 0.0 23 – 184466 – - 15398
檢視所有子程序:
# pstree -p 6648
agent_executor(6648)─┬─tar(15601)───gzip(15607)
├─{agent_executor}(6650)
├─{agent_executor}(14214)
├─{agent_executor}(14216)
├─{agent_executor}(15374)
├─{agent_executor}(15376)
├─{agent_executor}(15378)
├─{agent_executor}(15380)
├─{agent_executor}(15392)
├─{agent_executor}(15394)
└─{agent_executor}(15398)
檢視/proc/pid/status可以看到一些程序的當前狀態:
Name: bash
State: S (sleeping)
SleepAVG: 98%
Tgid: 11237
Pid: 11237
PPid: 11235
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmPeak: 66260 kB
VmSize: 66228 kB
VmLck: 0 kB
VmHWM: 1684 kB
VmRSS: 1684 kB
VmData: 456 kB
VmStk: 88 kB
VmExe: 712 kB
VmLib: 1508 kB
VmPTE: 68 kB
StaBrk: 008c3000 kB
Brk: 011b1000 kB
StaStk: 7fff8b728170 kB
Threads: 1
SigQ: 1/30222
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
Cpus_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000003
Mems_allowed: 1