一、簡介
在使用Windows操作系統中很多時候需要查看某些程序進程的運行情況,一般來說我們可以打開Windows提供的"任務管理器",然后點擊"進程"欄即可查看到當前系統運行的進程列表。例如偶爾出現系統內存、CPU占用過高的時候,我們往往都會查看進程列表,并找到當前占用內存或CPU過高的進程,再把這些占用過高的進程給清理掉,以便釋放內存使用率。
在Linux系統中也同樣需要及時查看進程運行(內存占用)情況。以便我們輕松的實現系統調整優化(調整占用過高的進程、查看調整nice值等),下面將具體說明相關命令的用法講解。
二、用法詳解
1.pstree,查看進程樹命令,詳情見下圖:
2.ps,以靜態(快照)方式查看進程狀態結果命令。
(1)ps命令的BSD風格命令,詳情見下圖:
(2)ps命令的SysV風格命令,詳情見下圖:
3.pgrep,過濾顯示指定進程命令,語法格式:pgrep [OPTIONS] "PATTERN"
-U UID:僅顯示以指定用戶身份運行的進程;
-G GID
-l: 顯示PID和進程名;
例:顯示sshd這個進程的進程號,詳情見下圖:
例:顯示root用戶所有進程的進程號,詳情見下圖:
例:顯示屬組為root的所有進程的進程號,詳情見下圖:
例:顯示指定進程的pid和進程名,詳情見下圖:
4.pidof,查看指定進程的pid號,語法格式:pidof PROGRAM(給定命令行程序)。詳情見下圖:
5.top,以動態方式查看進程狀態結果命令,默認按CPU占有百分比排序,有許多交互式子命令,說明及圖片如下:
P:以占據的CPU百分比大小排序(每次刷新CPU占用的百分比);
M:以占據Memory空間大小排序;
T:CPU累積占用時間排序;
l: 是否顯示系統負載行;隊列長度的合理區間:CPU顆數*0.7
t: 是否顯示進程摘要信息及CPU負載狀態;
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
us: user space(用戶空間的程序所占據的CPU百分比)
sy: system (kernel space:運行內核代碼占據的百分比)
ni: nice(優先級,該值的調整影響到的CPU百分比)
id: idle(CPU空閑百分比)
wa: wait io(等待IO完成占據的CPU百分比)
hi: hardware interrupt(處理硬件中斷占據的CPU百分比)
si: software interrupt(處理軟件中斷占據的CPU百分比)
st: stolen, 被虛擬機“偷走”的百分比
1:平均或單獨顯示CPU的負載狀態;
m: 是否顯示內存相關的狀態信息;
q: 退出命令
s: 修改延遲時長
k: 終止指定進程
top命令的選項:
-b: batch,批次顯示
-n #: 顯示的批次數量
-d #: 指明延遲時長
6.uptime,顯示當前系統時間,運行時長,登錄用戶數及系統平均負載,詳情見下圖:
7.htop,比top命令功能更強大的以動態方式查看進程狀態結果命令,默認也是按照CPU占有百分比排序,安裝詳情見下圖:
htop也有許多交互式子命令,說明及圖片如下:
F1-F10:菜單命令;
u: 過濾僅顯示選定用戶的進程;
s: 跟蹤選定的進程所發起的系統調用;
l: 顯示選定進程所打開的文件;
t(F5): 顯示進程的層次結構(此命令與按F5鍵的效果相同);
a: 設定進程的cpu親緣性;(將選定的進程綁定在指定的CPU上)
htop命令的選項:
-d #: 延遲時長
-u USERNAME: 僅顯示指定用戶的進程;
-s COLUMN: 根據指定的字段進行排序;
8.vmstat,查看虛擬內存使用狀況,語法格式:vmsate [delay [count]],說明及圖片如下:
procs:
r: 等待運行的進程的個數;(隊列長度)
b:處理不可中斷睡眠狀態的進程的個數;(即IO阻塞隊列長度)
memory:
swpd: 交換內存使用量;
free: 空間的物理內存量;
buffer: 用于buffer的內存總量;
cache: 用于cache的內存總量;
swap:
si: 數據進入swap中的速率(kb/s)
so: 數據離開swap的速率(kb/s)
io
bi: 從塊設備讀入數據到系統的速率(kb/s)
bo: 保存數據至塊設備的速率(kb/s)
system
in: 中斷速率
cs: 進程切換的速率
cpu
us:
sy:
id:
wa:
st:
vmstat-s,顯示內存的狀態統計數據,詳情見下圖:
補充:/proc/#接口:每一個進程都有一個與其pid號同名的目錄,這里的文件就是內核參數中的映射。
9.pmap: 查看指定進程的內存映射關系;語法格式:pmap [OPTIONS] pid…
-x: 顯示擴展信息
詳情見下圖:
補充:采用cat /proc/#/maps 進行查看時,效果與上面相同,示例見下圖:
10.glances: 進程監控查看工具,命令語法格式如下:
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file] [-o output]
常用選項:
-b: 以Byte/s為單位顯示網卡設備數據交換速率;
-d: 關閉磁盤I/O功能模塊;
-f /PATH/TO/SOMEFILE:設置輸出文件的位置及格式;
-o {HTML|CSV}:
-m: 關閉mount功能模塊
-n: 關閉網絡功能模塊
-r: 關閉進程列表功能模塊
-t #: 指定延遲時長,默認為3秒;
-1:單獨顯示每顆CPU相關負載數據信息;
glances支持遠程模式:
即可以以C/S模式工作:
Server: 以監聽模式啟動glances;
Client: 以遠程模式啟動glances,遠程連入指定服務器,并Server上的相關性能數據;
服務模式:
glances -s -B IPADDR
-B: 用于指明監聽的本地地址;
客戶端模式:
glances -c IPADDR
-c: 用于連入的服務器的地址;
glances工具默認情況下沒有被安裝,可通過yum命令單獨進行安裝,安裝詳情見下圖:
例:以Byte/s為單位顯示網卡設備數據交換速率,命令為:glances -b,詳情見下圖:
例:關閉磁盤I/O功能模塊,命令為:glances -d,,詳情見下圖:
例:glances實現C/S架構遠程訪問,詳情見下圖:
11.dstat: 整合了vmstat, iostat, netstat and ifstat四款工具的功能,命令語法格式如下:
dstat [-afv] [options..] [delay [count]]
常用選項:
-c: 顯示cpu性能指標相關的統計數據;
-d: 顯示disk相關的速率數據;
-g: 顯示page相關的速率數據;
-i: 顯示interrupt相關的速率數據;
-l: 顯示load average相關的統計數據;
-m: 顯示memory相關的統計數據;
-n: 顯示網絡收發數據的速率;
-p: 顯示進程相關的統計數據,
-r: io請求的速率;
-s: 顯示swap的相關數據
-y: 顯示系統相關的數據,包括中斷和進程切換;
–top-cpu:顯示最占用CPU的進程;
–top-bio:顯示最消耗block io的進程;
–top-io:最占用io的進程;
–top-mem:顯示最占用內存的進程;
–ipc: 顯示進程間通信相關的速率數據;
–raw: 顯示raw套接的相關的數據;
–tcp: 顯示tcp套接字的相關數據;
–udp: 顯示udp套接字的相關數據;
–unix: 顯示unix sock接口相關的統計數據;
–socket:
-a: -cdngy
dstat工具默認情況下沒有被安裝,可通過yum命令單獨進行安裝,安裝詳情見下圖:
例:使用dstat查看CPU用量,命令為:dstat -c,詳情見下圖:
例:使用dstat顯示disk相關的速率數據,命令為:dstat -d,詳情見下圖:
例:使用dstat顯示page相關的速率數據,命令為:dstat -g,詳情見下圖:
例:使用dstat顯示load average相關的統計數據,命令為:dstat -l,詳情見下圖:
例:使用dstat顯示網絡收發數據的速率,命令為:dstat -n,詳情見下圖:
例:使用dstat顯示最占用CPU的進程,命令為:dstat –top-cpu,詳情見下圖:
例:使用dstat顯示最占用io的進程及最占用內存的進程,命令為:dstat –top-cpu 及 dstat –top-mem,詳情見下圖:
補充:IPC: 進程間通信
常見形式:
message queue(消息隊列)
semerphore(信號量)
shared memory(共享內存)
signal(信號)
12.signal: 傳遞給進程的短小信息
Linux主機支持的進程間可用到的信息:
(1) kill -l
(2) man 7 signal
向進程發信號:
kill [-SIGNAL] PID
默認的信號為SIGTERM(15號);
信號表示方式:
(1) 完整名稱,例如SIGINT
(2) 簡寫名稱,例如INT
(3) 數據代稱,例如2
常用信號:
SIGHUP: 1, 通知進程重讀其配置文件以讓新的配置生效,但不用重新啟動進程;
SIGINT:2, 打斷正在運行中的進程,相當于鍵盤組合鍵Ctrl+c
SIGKILL:9, 強行中止正在運行中的進程
SIGTERM: 15, 安全中止正在運行中的進程(kill后面不加信號值默認為15號)
SIGSTOP: 19, 暫停進程
SIGCONT: 18, 繼續運行指定進程
例:查看當前系統中支持的信號種類及各信號含義,命令為:kill -l,詳情見下圖:
例:使用kill命令安全結束tomcat進程,命令為:kill tomcat端口號,詳情見下圖:
kill相似的一組進程,語法格式:killall [-SIGNAL] PROGRAM
例:使用killall命令安全結束名稱全部為java的進程,命令為:killall java,詳情見下圖:
作業管理:
前臺作業:通過終端啟動,并且在停止之前也會一直占據終端;
后臺作業:作業啟動之時與終端無關,或者是在前臺啟動,但啟動后轉為與終端無關模式運行;
如何讓作業運行于后臺?
1、對于已經啟動并處于運行中的作業:組合鍵:Ctrl+z
Note: 作業被送往后臺后,默認處于stopped狀態;
例:用vim打開a.txt文件后讓其運行與后臺,詳情如下圖:
2、對于尚未啟動的作業:COMMAND &
例:直接用vim a.txt &這種方式可以實現讓vim a.txt這個進程直接在后臺運行,詳情如下圖:
注意: 此兩類方式相關作業,仍然與終端相關;這意味著,終端終止,將會導致與此終端相關的所有作業被終止;
剝離進程與終端的關系:# nohup COMMAND &
例:nohup ping 127.0.0.1 & 命令可以實現剝離終端進程直接在后臺運行,詳情如下圖:
作業查看:
jobs命令
作業號、作業狀態、啟動命令行程序
例:使用jobs查看處于后臺運行的作業,詳情如下圖:
作業控制命令:
fg [[%]job_num]:把指定的作業調回前臺,示例:fg 1 等價于 fg %1 這里百分號可以省略,詳見下圖:
bg [[%]job_num]:把調往后臺的指定的作業啟動起來,讓其后臺默默運行;但此作業必須支持運行于后臺(例如 cp、mv、rm命令等);
kill [%job_num]:終止指定的作業,這里百分號不能省(省略就變成殺死進程號),具體示例詳見下圖:
進程優先級調整:
靜態優先級:通過指定進程的nice值來調整其優先級;用戶空間運行進程一般都有其nice值;
nice值: -20, 19
優先級: 100, 139
默認啟動進程時,其nice值為0, 其優先級為120;
(1) 對于尚未啟動的進程:# nice -n N COMMAND
(2) 對于已經啟動并處于運行中的進程:# renice -n N PID
具體示例詳見下圖:
注意:nice值越小優先級越高,普通用戶僅能夠調大nice,調低優先級;
補充pkill命令,該命令也可實現殺死運行中的程序,也可用作踢除當前系統登錄用戶使用(僅管理員可用):
1. 將某個終端的用戶踢出
pkill -kill -t pts/2(終端號)
2. 按用戶名踢出用戶
pkill -kill -U test(系統用戶名)
其他相關命令:sar, iostat, ifstat, tsar等留待今后繼續研究。
原創文章,作者:鏡花水月,如若轉載,請注明出處:http://www.www58058.com/8527
不錯,我轉載了