ps, top, htop, vmstat, dstat,pstree,pidof, pgrep緩存
在htop默認沒有添加字段的狀況下。
bash
ps | top | htop | |
常駐內存 | rss, rsz, rssize | ||
線性內存 | vsz, vsize | VIRT | VIRT |
進程佔用CPU | %cpu | %CPU | CPU% |
進程狀態 | state, S | S | S |
物理內存使用 | %mem,RES | MEM%, RES | |
共享內享 | SHR | SHR | |
進程已使用CPU時長 | time, cputime | TIME+ | TIME+ |
進程優先級 | PR | PR | |
nice值 | NI | NI |
ps :服務器
詳細信息請看這裏:http://www-01.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds4/ps.htm?lang=zh網絡
經過/proc/PID/(內核中進程狀態信息)統計的各類信息;
report a snapshot of the current processes.
ps [options]:
選項有三種風格:
1 UNIX options, which may be grouped and must be preceded by a dash. 帶-session
2 BSD options, which may be grouped and must not be used with a dash. 不帶-多線程
3 GNU long options, which are preceded by two dashes. 長格式--app
啓動進程的方式:
系統啓動過程當中自動啓動:與終端無關的進程;
用戶經過終端啓動:與終端相關的進程;less
第一種風格:
選項:
a:全部與終端相關的進程;
x:全部與終端無關的進程;
u:以用戶爲中心組織進程狀態信息顯示;
ssh
經常使用組合之一:auxsocket
[root@localhost yum.repos.d]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 58848 6800 ? Ss 11:04 0:04 /usr/lib/systemd/systemd --switched-root root 2 0.0 0.0 0 0 ? S 11:04 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:04 0:04 [ksoftirqd/0] ..... root 1184 0.0 0.2 84584 2252 ? Ss 11:05 0:00 login -- root root 4066 0.0 0.3 82488 3588 ? Ss 21:07 0:00 /usr/sbin/sshd -D
帶中括號的都是內核級進程,不帶的是用戶空間程序。
PID: 進程ID。
%CPU: 所佔CPU。
%MEM: 所佔內存。
VSZ:Virtual Memory Size 虛擬內存集,又稱線性內存空間,至關因而top中的VIRT。 單位kb。
RSS:Resident Size,常駐內存集;不能被交換到swap中的數據所佔大小。
STAT:
R:running,運行狀態。
S:interruptable sleeping,可中斷睡眠,等待某些條件爲真。
D:uninterruptable sleeping,不可中斷睡眠
T:Stopped,暫停狀態,用戶可喚醒。如ctrl+z的進程。
Z:zombie,程序執行完畢已終止,而父進程尚未來得及回收的這段時間。
+:前臺進程
l:多線程進程
N:低優先級進程
<:高優先級進程
s:session leader 會話主進程
START: 進程啓動時的時間
TIME:進程佔用CPU的時間,也就是已運行時間。
第二種風格:
-e:顯示全部進程
-f:顯示完整格式的進程信息
經常使用組合之二:-ef
[root@localhost yum.repos.d]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:04 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deser root 2 0 0 11:04 ? 00:00:00 [kthreadd] root 11705 4234 98 22:05 pts/1 00:00:48 dd if=/dev/zero of=/dev/null
PPID: 父進程ID.
C: cpu utilization CPU使用率
STIME: 進程啓動時的時間
TTY: 終端
TIME: 進程運行時長,佔用CPU時長。
經常使用組合之三:-eFH
-F:顯示額外信息;
-H:以層級結構顯示進程的相關信息;
[root@localhost grub2]# ps -eFH | grep -E '(sshd|PPID)' UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 1149 1 0 20622 3612 0 17:39 ? 00:00:00 /usr/sbin/sshd -D root 13397 1149 0 33837 4936 1 20:11 ? 00:00:00 sshd: root@pts/7 root 13398 1149 0 33837 4928 0 20:11 ? 00:00:02 sshd: root@pts/5 root 13917 13410 0 28160 972 1 23:14 pts/5 00:00:00 grep --color=auto -E (sshd|PPID) root 13399 1149 0 33803 4936 1 20:11 ? 00:00:00 sshd: root@pts/4 root 13403 1149 0 33837 4932 1 20:11 ? 00:00:01 sshd: root@pts/6
SZ: 進程的核心映像大小
RSS: 常駐內存。
PSR:運行於哪顆CPU之上
經常使用組合之四:-eo, axo
-o:自定義顯示的字段,以逗號分隔
字段的名稱能夠在man ps的STANDARD FORMAT SPECIFIERS段中找到。
經常使用的field:pid, ni, priority, psr, pcpu, stat, comm, tty, ppid, rtprio
ni:nice值;
priority:priority, 優先級;
rtprio:real time priority,實時優先級;
pcpu表示%cpu。pmem表示%mem
[root@localhost grub2]# ps axo pid,ppid,%cpu,%mem,stat,priority,rtprio,ni,psr,command | grep -E "(sshd|PID.*PPID)" PID PPID %CPU %MEM STAT PRI RTPRIO NI PSR COMMAND 1149 1 0.0 0.3 Ss 20 - 0 0 /usr/sbin/sshd -D 13397 1149 0.0 0.4 Ss 20 - 0 1 sshd: root@pts/7 13398 1149 0.0 0.4 Ss 20 - 0 1 sshd: root@pts/5 13399 1149 0.0 0.4 Ss 20 - 0 1 sshd: root@pts/4 13403 1149 0.0 0.4 Ss 20 - 0 1 sshd: root@pts/6 13921 13410 0.0 0.0 S+ 20 - 0 1 grep --color=auto -E (sshd|PID.*PPID)
cpu百分比: %cpu,pcpu,C
內存百分比:%mem,pmem
nice值:ni,nice
常駐內存:rss,rsz,rssize
用戶ID:uid,euid
用戶:uname,user,euser.
虛擬內存/線性內存:vsz,vsize
進程佔用CPU時間:time,cputime
進程狀態:state,S
top:
- display Linux processes
第一行:當前時間,系統已運行時間, 登陸用戶, 最近1分鐘,5分鐘,15分鐘的負載(等待CPU的進程隊列)。
第二行:進程總數,正在運行的,睡眠的,暫停的,僵死的。
第三行:用戶空間cpu佔用,系統空間CPU佔用,nice調整過的,空閒百分比,等待I/O的,硬中斷,軟中斷,被偷有的(虛擬化佔用的)
第四行:總內存,空閒的,使用的,buff/cache佔用的。
第五行:總swap,空閒的swap,使用的swap。可分配物理內存
PR: 優先級
NI: NICE值
VIRT: 線性地址空間
RES:物理內存使用
SHR: 共享內存使用(共享庫類佔用)
S: 狀態
排序:
P:以佔據CPU百分比排序;
M:以佔據內存百分比排序;
T:累積佔用CPU時間排序;
首部信息:
uptime信息:l命令
tasks及cpu信息:t命令
內存信息:m命令
退出命令:q
修改刷新時間間隔:s
終止指定的進程:k
選項:
-d #:指定刷新時間間隔,默認爲3秒;
-b:以批次方式顯示;
-n #:顯示多少批次;
uptime:
顯示系統時間、運行時長及平均負載;過去1分鐘、5分鐘和15分鐘的平均負載;等待運行的進程隊列的長度;
htop:
選項:
-d #:指定延遲時間間隔;
-u UserName:僅顯示指定用戶的進程;
-s COLUME:以指定字段進行排序;
子命令:
l:顯示選定的進程打開的文件列表;
s:跟蹤選定的進程的系統調用;
t:以層級關係顯示各進程狀態;
a:將選定的進程綁定至某指定的CPU核心;
u 選擇指定用戶的進程
# 能夠直接按數字來指定到進程。
進程部分默認不顯示kernel進程,因此與top的不同。其它字段意義同樣。
F2能夠調整各顯示。F3搜索,F4過濾。
PRI: 優先級
VIRT: 佔用的虛擬內存(線性內存)
RES: 物理內存佔用
SHR: 共享內存佔用
S: 狀態
vmstat
-s 內存統計信息
r 運行或等待CPU時間片的進程個數
b 被阻塞(一般爲等待IO完成)的進程隊列的長度
swpd 從物理內存交換至swap中的數據量,是已佔用的空間。 而不是速率。
free 空閒的物理內存
buffer buffer大小,一般與緩存寫操做有關
cache cache大小, 一般緩存的都是page頁面文件 與緩存讀操做有關。
si : swap in 數據進入swap中的數據量, 一般是速率,kb/s
so : swap out 數據離開swap的數據量。
bi : block in 從塊設備讀入內存的數據量,速率kb/s
bo : block out 保存至塊設備的數據量, 速率kb/s
in : interrupts 中斷, 每秒中斷數
cs : context switch, 上下文切換,也就是進程切換, 每秒切換次數。
上下文切換 幾百上千仍是正常的。 上萬就表示CPU弱,任務多。
軟中斷是指系統調用,從用戶空間切換到內核空間。 不是指上下文切換。
任何從用戶模式轉到內核模式的都是經過軟中斷的方式進行的。
任何硬件級別的一些事件的通知是經過硬中斷進行的。
在網絡服務器上,中斷是比較高的。
任何一個網絡數據報到達主機時,都會發生一個硬中斷。
任何一個磁盤I/O發生時,也會發生硬中斷。
us: 用戶空間佔用
sy: 內核空間佔用
id: 空閒
wa: 等待I/O的進程佔用
st: 被偷有的(虛擬化佔用)
dstat:
- versatile tool for generating system resource statistics
cpu:
usr: 用戶空間使用
sys: 系統使用
idl: 空閒的
wai: 等待I/O
hiq: 硬中斷隊列
siq: 軟中斷隊列
system:
int: 硬中斷數量
csw: 上下文切換數量
dstat [-afv] [options..] [delay [count]]
經常使用選項:
-c, --cpu:顯示cpu相關信息;
-C #,#,...,total,包含的CPU
-d, --disk:顯示磁盤的相關信息
-D sda,sdb,...,tobal 包含的磁盤
-g:顯示page相關的速率數據;
-m:Memory的相關統計數據
-n:Interface的相關統計數據;
-p:顯示process的相關統計數據;
-r:顯示io請求的相關的統計數據;
-s:顯示swapped的相關統計數據;
--tcp
--udp
--raw
--socket
--ipc
--top-cpu:顯示最佔用CPU的進程;
--top-io:最佔用io的進程;
--top-mem:最佔用內存的進程;
--top-lantency:延遲最大的進程;
選項能夠在dstat -h 中查看。
pstree
pstree - display a tree of processes
[root@localhost test]# pstree systemd─┬─NetworkManager─┬─2*[dhclient] │ └─3*[{NetworkManager}] ├─abrt-watch-log ├─abrtd ├─agetty ├─alsactl ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─chronyd ├─dbus-daemon───{dbus-daemon} ├─irqbalance ├─lsmd ├─lvmetad ├─master─┬─bounce │ ├─pickup │ ├─qmgr │ └─smtp ├─polkitd───5*[{polkitd}] ├─rsyslogd───2*[{rsyslogd}] ├─smartd ├─sshd─┬─sshd───bash───pstree │ ├─sshd───bash───man───less │ └─sshd───bash ├─systemd-journal ├─systemd-logind ├─systemd-udevd └─tuned───4*[{tuned}] [root@localhost test]#
pidof
pidof -- find the process ID of a running program.
[root@localhost test]# pidof crond sshd 1179 3211 3125 2937 1168 [root@localhost test]# pidof -s crond sshd 1179 3211 [root@localhost test]#
pgrep,pkill
look up or signal processes based on name and other attributes
能夠通符查找進程。下邊的less是由於在一個ssh終端中執行man。
[root@localhost test]# pgrep ssh* -a 1168 /usr/sbin/sshd -D 2937 sshd: root@pts/1 3125 sshd: root@pts/0 3211 sshd: root@pts/2 3810 less -s [root@localhost test]# [root@localhost test]# pkill sshd
pgrep [options] pattern
-u uid:effective user
-U uid:read user
-t TERMINAL:與指定的終端相關的進程;
-l:顯示進程名;
-a:顯示完整格式的進程名;
-P pid:顯示此進程的子進程;