一、進程相關概念及系統管理工具
進程概念
內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、 安全功能等
Process: 運行中的程序的一個副本,是被載入內存的一個指令集合
進程ID( Process ID, PID)號碼被用來標記各個進程
UID、 GID、和SELinux語境決定對文件系統的存取和訪問權限,通常從執行進程的用戶來繼承
存在生命周期
task struct: Linux內核存儲進程信息的數據結構格式
ask list:多個任務的的task struct組成的鏈表
進程創建:
init:第一個進程
父子關系
進程:都由其父進程創建, COW
fork(), clone()
進程優先級
進程優先級:
系統優先級: 數字越小,優先級越高
0-139( CentOS4,5)
各有140個運行隊列和過期隊列
0-98, 99( CenOS6)
實時優先級: 99-0:值最大優先級最高
Nice值: -20, 19對應系統優先級100-139或99
Big O:時間復雜度,用時和規模的關系
O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)
進程內存:
Page Frame: 頁框,用存儲頁面數據,存儲Page 4k
LRU: Least Recently Used 近期最少使用算法,釋放內存物理地址空間和線性地址空間
MMU: Memory Management Unit負責轉換線性和物理地址
IPC: Inter Process Communication
同一主機上
signal
shm: shared memory
semophore 信號量,一種計數器
不同主機上:
rpc: remote procedure call
socket: IP和端口號
進程狀態
Linux內核:搶占式多任務
進程類型:
守護進程: daemon,在系統引導過程中啟動的進程, 和終端無關進程
前臺進程:跟終端相關,通過終端啟動的進程
注意:兩者可相互轉化
進程狀態:
運行態: running
就緒態: ready
睡眠態:
可中斷: interruptable
不可中斷: uninterruptable
停止態: stopped,暫停于內存中,但不會被調度,除非手動啟動
僵死態: zombie,結束進程,父進程結束前,子進程不關閉
系統管理工具
進程的分類:
CPU-Bound: CPU密集型,非交互
IO-Bound: IO密集型,交互
Linux系統狀態的查看及管理工具: pstree, ps, pidof,pgrep, top, htop, glance, pmap, vmstat, dstat, kill,pkill, job, bg, fg, nohup
pstree命令:
pstree – display a tree of processes
ps: process state
ps – report a snapshot of the current processes
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
列舉進程ps
適用ps來查看進程信息
ps [OPTION]…
支持三種選項:
UNIX選項 如-a
BSD選項 如a
GUN選項 如–help
默認顯示當前終端中的進程
a 選項包括所有終端中的進程
x 選項包括不鏈接終端的進程
u 選項顯示進程所有者的信息
f 選項顯示進程的父進程
o 屬性… 選項顯示定制的信息:
↘pid、 comm、 %cpu、 %mem、 state、 tty、 euser、 ruser
進程管理工具
VSZ: Virtual memory SiZe,虛擬內存集,線性內存
RSS: ReSident Size, 常駐內存集
STAT:進程狀態
R: running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前臺進程
l: 多線程進程
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者
常用組合: -ef
-e: 顯示所有進程
-f: 顯示完整格式程序信息
常用組合: -eFH
-F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
常用組合:自定義
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ni: nice值
pri: priority,優先級
psr: processor, CPU編號
rtprio: 實時優先級
搜索進程
最靈活: ps 選項 | 其它命令
按預定義的模式: pgrep
pgrep [options] patter
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示父進程為此處指定的進程的進程列表
按確切的程序名稱: /sbin/pidof
$ pidof bash
系統工具
uptime
顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載( 1、 5、 10分鐘的平均負載,一般不會超過1)
系統平均負載:
指在特定時間間隔內運行隊列中的平均進程數。
如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。 如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題。
如果linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了。
進程管理工具
top:有許多內置命令:
排序:
P:以占據的CPU百分比,%CPU
M:占據內存百分比,%MEM
T:累積占據CPU時長,TIME+
首部信息顯示:
uptime信息: l命令
tasks及cpu信息: t命令
cpu分別顯示: 1 (數字)
memory信息: m命令
退出命令: q
修改刷新時間間隔: s
終止指定進程: k
保存文件: W
top命令
選項:
-d #: 指定刷新時間間隔,默認為3秒
-b: 以批次方式
-n #: 顯示多少批次
欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閑
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機偷走的時間
PID (Process Id):任務的進程ID
PPID (Parent Process Pid):父任務的進程ID
RUSER (Real User Name):任務的所有者真實名稱
UID (User Id):任務所有者ID
USER (User Name):任務所有者名稱
GROUP (Group Name):任務所有者群組名
TTY (Controlling Tty):終端
PR (Priority):優先級
%CPU (CPU usage):CPU使用率
%MEM (Memory usage (RES)):內存使用率
S (Process Status):進程狀態
TIME+ (CPU Time, hundredths):CPU時間,精確到秒
htop命令:需從Fedora-EPEL源安裝
http://172.16.0.1/fedora-epel/7/x86_64
選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程;
-s COLUME: 以指定字段進行排序;
子命令:
s: 跟蹤選定進程的系統調用;
l: 顯示選定進程打開的文件列表;
a:將選定的進程綁定至某指定CPU核心;
t: 顯示進程樹
內存工具
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.
sy: Time spent running kernel code
id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
wa: Time spent waiting for IO. 2.5.41前,包括in idle.
st: Time stolen from a virtual machine. 2.6.11前, unknown.
選項:
-s: 顯示內存的統計數據
pmap命令:進程的內存映射
pmap [options] pid […]
-x: 顯示詳細格式的信息;
#pmap 1
另外一種實現:
# cat /proc/PID/maps
系統監控工具
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
l Show/hide logs
c Sort processes by CPU%
b Bytes or bits for network I/O
m Sort processes by MEM%
w Delete warning logs
p Sort processes by name
x Delete warning and critical logs
i Sort processes by I/O rate
1 Global CPU or per-CPU stats
d Show/hide disk I/O stats
h Show/hide this help screen
f Show/hide file system stats
t View network I/O as combination
n Show/hide network stats
u View cumulative network I/O
s Show/hide sensors stats
q Quit (Esc and Ctrl-C also work)
y Show/hide hddtemp stats
常用選項:
-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 [-afv] [options..] [delay [count]]
-c: 顯示cpu相關信息
-C #,#,…,total
-d: 顯示disk相關信息
-D total,sda,sdb,…
-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命令:
向進程發送控制信號,以實現對進程管理
顯示當前系統可用信號: 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: 顯示父進程為此處指定的進程的進程列表
原創文章,作者:DYW,如若轉載,請注明出處:http://www.www58058.com/46130