在咱們瞭解進程之後,我接下來要掌握進程的管理工具如:pstree , ps , pgrep , pidof , top ,htop , glance , pmap , vmstat , dstat , kill , pkill , uptime 等;Linux 系統各進程的相關信息均保存在/proc/PID 目錄下的各文件中;linux
一,pstree緩存
pstree:是以樹狀的形式來顯示進程的關係;bash
pstree [option]
服務器
-p : 連進程編號一塊顯示出來;
網絡
-a : 顯示每一個程序的完整指令,包含路徑,參數或是常駐服務的標示;
session
二,ps多線程
ps:查看進程的信息和搜索進程;app
ps [OPTION]...socket
支持三種類型選項的格式:tcp
GUN 選項如--help ;
UNIX 選項(以一個「-「開頭的選項)如-A -e:
選項:
-e: 顯示全部進程
-f: 顯示完整格式程序信息
-F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
經常使用組合:-ef , -eFH
BSD 選項(直接用字母開頭的)如a:
默認顯示當前終端中的進程
a :顯示全部終端中的進程
x :顯示不連接終端的進程
u :顯示進程全部者的信息
f :顯示進程的父進程
l :長格式輸出
o :屬性… 選項顯示定製的信息:
pid 、comm 、%cpu 、%mem 、state 、tty 、euser(執行用戶) 、ruser(真正用戶)
經常使用組合:aux,axl
經常使用組合:自定義:
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm,等等
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm,等等
ps查看進程輸出內容的解釋:
USER |
用戶名 |
UID | 用戶ID(user ID) |
PID | 進程ID(Process ID) |
PPID | 父進程的進程ID(Parent Process id) |
SID | 會話ID(Session id) |
%CPU | 進程的CPU佔用率 |
%MEM | 進程的內存佔用率 |
VSZ | Virtual memory SiZe ,虛擬內存集,線性內存(虛擬內存的大小) |
RSS | ReSident Size, 常駐內存集(實際內存的大小) |
TTY | 與進程關聯的終端 |
STAT | 進程狀態 |
STAT |
R :running(運行) |
S: interruptable sleeping(睡眠) | |
D: uninterruptable sleeping(不可中斷) | |
I:空閒 | |
T: stopped(終止) | |
Z: zombie(僵死) | |
+: 前臺進程 | |
l: 多線程進程 | |
N :低優先級進程 | |
<: 高優先級進程 | |
s: session leader ,會話(子進程)發起者 | |
START | 進程啓動時間和日期 |
TIME | 進程使用的總CPU時間 |
COMMAND | 正在執行的命令行命令 |
NI |
優先級(Nice) |
PRI | 進程優先級編號(Priority) |
WCHAN | 進程正在睡眠的內核函數名;該函數的名稱是從/root/system.map文件中得到的 |
FLAGS | 與進程相關的數字標識 |
pgrep:按預約義的模式搜索進程;
pgrep [options] pattern
-u uid: effective user ,真正有效者
-U uid: real user ,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
四,pidof
pidof:是Linux系統中用來查找正在運行進程的進程號
按確切的程序名稱:/sbin/pido
如:pidof bash
五,top
top :動態的顯示了系統的情況;
選項:
-d #: 指定刷新時間間隔,默認爲3秒
-b: 以批次方式
-n #: 顯示多少批次
有許多內置命令:
排序:
P :以佔據的CPU 百分比,%CPU
M :佔據內存百分比,%MEM
T :累積佔據CPU 時長,TIME+
首部信息顯示:
uptime 信息:l 命令
tasks 及cpu 信息:t 命令
cpu 分別顯示:1 ( 數字)
memory 信息:m 命令
退出命令:q
修改刷新時間間隔:s
終止指定進程:k
保存文件:W(保存在 /root/.toprc)
top命令欄位信息簡介:
第一行: 任務隊列信息:
13:06:34 |
當前時間 |
up 55 min |
系統運行時間,格式爲時:分 |
1 user |
當前登陸用戶數 |
load average: 0.00, 0.01, 0.05 |
系統負載,即任務隊列的平均長度, 三個數值分別爲 1分鐘、5分鐘、15分鐘前到如今的平均值; |
第二行:進程的信息(Tasks):
Tasks: 363 total | 進程總數 |
2 running |
正在運行的進程數 |
361 sleeping |
睡眠的進程數 |
0 stopped |
中止的進程數 |
0 zombie |
殭屍進程數 |
第三行:CPU的信息 (%CPU(s)):
0.3 us | 用戶空間佔用CPU百分比 |
0.7 sy |
內核空間佔用CPU百分比 |
0.0 ni |
用戶進程空間內改變過優先級的進程佔用CPU百分比 |
99.0 id |
空閒CPU百分比 |
0.0 wa |
等待輸入輸出的CPU時間百分比 |
0.0 hi |
硬中斷 |
0.0 si |
軟中斷(模式切換) |
0.0 st |
虛擬機偷走的時間 |
第四行:內存信息(KiB Mem):
1001332 total | 物理內存總量 |
103192 used |
使用的物理內存總量 |
768632 free |
空閒內存總量 |
129508 buff/cache |
用做內核緩存的內存量 |
第五行:交換信息(KiB Swap):
4195320 total |
交換區總量 |
0 used |
使用的交換區總量 |
4195320 free |
空閒交換區總量 |
761356 avail |
緩衝的交換區總量。 內存中的內容被換出到交換區,然後又被換入到內存,但使用過的交換區還沒有被覆蓋, 該數值即爲這些內容已存在於內存中的交換區的大小。相應的內存再次被換出時可沒必要再對交換區寫入。 |
六,htop
htop 命令:(top的加強版)需從Fedora-EPEL 源安裝:http://10.1.0.1/fedora-epel/7/x86_64/
選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程;
-s COLUME: 以指定字段進行排序;
子命令:
s: 跟蹤選定進程的系統調用;
l: 顯示選定進程打開的文件列表;
a :將選定的進程綁定至某指定CPU 核心;
t: 顯示進程樹
七,vmstat
vmstat 命令:虛擬內存信息
vmstat [options] [delay [count]]
vmstat 2 5
procs | r |
等待運行的進程的個數,和核心數有關 |
b | 處於不可中斷睡眠態的進程個數( 被阻塞的隊列的長度) | |
memory | swpd | 交換內存的使用總量 |
free | 空閒物理內存總量 | |
buffer | 用於buffer 的內存總量 | |
cache | 用於cache 的內存總量 | |
swap |
si | 從磁盤交換進內存的數據速率(kb/s) |
so | 從內存交換至磁盤的數據速率(kb/s) | |
io | bi | 從塊設備讀入數據到系統的速率(kb/s) |
bo | 保存數據至塊設備的速率 | |
system | in | interrupts, 中斷速率,包括時鐘 |
cs | context switch, 進程切換速率 | |
cpu | us | Time spent running non-kernel code, 用戶CPU時間 |
sy | Time spent running kernel code, 系統CPU時間 | |
id | Time spent idle, 空閒CPU時間 |
|
wa | Time spent waiting for IO,等待IO CPU時間 | |
st | Time stolen from a virtual machine,虛擬機偷走的時間 |
選項:
-s: 顯示內存的統計數據
八,pmap
pmap 命令 :進程對應的內存映射
pmap [options] pid [...]
-x: 顯示詳細格式的信息;
#pmap 1692
另一種實現:
# cat /proc/1692/maps
九,glance
glances 命令:系統資源監控, (需從EPEL源中下載)
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
內建命令:
a |
Sort processes automatically | b | Bytes or bits for network I/O |
c |
Sort processes by CPU% | d |
Show/hide disk I/O stats |
f |
Show/hide file system stats |
h |
Show/hide this help screen |
i |
Sort processes by I/O rate |
l |
Show/hide logs |
m |
Sort processes by MEM% |
n |
Show/hide network stats |
p |
Sort processes by name |
q |
Quit (Esc and Ctrl-C also work) |
s |
Show/hide sensors stats |
t |
View network I/O as combination |
u |
View cumulative network I/O |
y |
Show/hide hddtemp stats |
1 |
Global CPU or per-CPU stats |
mw |
Delete warning logs |
經常使用選項:
-b: 以Byte 爲單位顯示網卡數據速率
-d: 關閉磁盤I/O 模塊
-f /path/to/somefile: 設定輸入文件位置
-o {HTML|CSV} :輸出格式
-m: 禁用mount 模塊
-n: 禁用網絡模塊
-t #: 延遲時間間隔
-1 :每一個CPU 的相關數據單獨顯示
C/S 模式下運行glances 命令:
服務模式:
glances -s -B IPADDR
IPADDR: 指明監聽的本機哪一個地址
客戶端模式:
glances -c IPADDR
IPADDR :要連入的服務器端地址
十,dstat
dstat 命令:系統資源統計
dstat [-afv] [options..] [delay [count]]
-c: 顯示cpu 相關信息
-C #,#,...,total
-d: 顯示disk 相關信息
-D total,sda,sdb,...
-g :顯示page 相關統計數據
-m: 顯示memory 相關統計數據
-n: 顯示network 相關統計數據
-p: 顯示process 相關統計數據
-r: 顯示io 請求相關的統計數據
-s: 顯示swapped 相關的統計數據
--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu :顯示最佔用CPU 的進程
--top-io: 顯示最佔用io 的進程
--top-mem: 顯示最佔用內存的進程
--top-latency: 顯示延遲最大的進程
十一,kill,pkill
kill 命令:
向進程發送控制信號,以實現對進程管理
顯示當前系統可用信號: kill -l
經常使用信號:man 7 signal
1) SIGHUP: 無須關閉進程而讓其重讀配置文件
2) SIGINT: 停止正在運行的進程;至關於Ctrl+c
9) SIGKILL: 殺死正在運行的進程
15) SIGTERM :終止正在運行的進程
18) SIGCONT :繼續運行
19) SIGSTOP :後臺休眠
指定信號的方法:
(1) 信號的數字標識;1, 2, 9
(2) 信號完整名稱;SIGHUP
(3) 信號的簡寫名稱;HUP
進程管理工具
按PID :kill [-SIGNAL] pid …
按名稱:killall [-SIGNAL] comm…
按模式:pkill [options] pattern
-SIGNAL
-u uid: effective user ,生效者
-U uid: real user ,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示父進程爲此處指定的進程的進程列表
十二,uptime
uptime:查看當前系統負載狀況;
顯示內容的信息:
顯示當前時間,系統已啓動的時間、當前上線人數,系統平均負載(1 、5 、10 分鐘的平均負載,通常不會超過1) ;
系統平均負載:
指在特定時間間隔內運行隊列中的平均進程數 。
若是每一個CPU 內核的當前活動進程數不大於3的話,那麼系統的性能良好。若是每一個CPU 內核的任務數大於5,那麼這臺機器的性能有嚴重問題;
若是linux 主機是1個雙核CPU 的話,當Load Average爲6 的時候說明機器已經被充分使用了;