進程概念
內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、 安全功能等 Process: 運行中的程序的一個 副本,是被 載入內存的一個指令集合 進程ID (Process ID,PID)號碼被用來標記各個進程 UID 、GID、和SELinux語境決定對文件系統的存取和訪問權限, 通常從執行進程的用戶來繼承 存在生命周期 task struct:Linux內核存儲進程信息的數據結構格式 task list :多個任務的的task struct 組成的鏈表 進程創建: init :第一個進程 父子關系 進程:都由其父進程創建,COW fork(), clone()
進程優先級
進程優先級:
系統優先級: 數字越小,優先級越高
0-139(CentOS4,5)默認為120 各有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 -p:列舉編號
ps: process state
ps - report a snapshot of the current processesLinux系統各進程的相關信息均保存在/proc/PID 目錄下的各文件中
進程管理工具
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 ,會話(子進程)發起者
列舉進程ps
適用ps 來查看進程信息 ps [OPTION]... 支持三種選項: UNIX 選項如-A -e BSD 選項如 a GUN 選項如--help
? 默認顯示當前終端中的進程
? a 選項包括所有終端中的進程 ? x 選項包括不連接終端的進程 ? u 選項顯示進程所有者的信息
? f 選項顯示進程的父進程 ? o 屬性… 選項顯示定制的信息:o必須在最后
# ps axo pid,comm,%cpu,%mem,state,tty,euser,ruser
常用組合:
-ef -e: 顯示所有進程 ==ax-f: 顯示完整格式程序信息
-eFH -F:顯示更完整格式的進程信息 -H:以進程層級格式顯示進程相關信息(父子進程關系)
優先級
ni: nice值pri: priority ,優先級psr: processor, CPU 編號rtprio: 實時優先級
自定義
# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm pid, 進程ID tid, 線程ID class, 類型 rtprio,實時優先級 ni, nice優先級 pri, 實時優先級 psr, cpu編號 pcpu, CPU占用率 stat, 進程狀態 comm 發起命令
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm euid, 有效用戶ID 進程執行者 ruid, 實際用戶ID 進程發起者 tty, 終端號 tpgid, 控制tty進程組ID sess, 會話ID pgrp, 進程組ID ppid, 父進程ID
參數 | 描述 |
---|---|
pcpu | CPU占用率 |
pid | 進程ID |
ppid | 父進程ID |
pmem | 內存使用率 |
comm | 可執行文件 |
cmd | 簡單命令(simplecommand) |
user | 啟動進程的用戶 |
nice | 優先級(niceness) |
time | 累計的CPU時間 |
etime | 進程啟動后累計時間 |
tty | 當前終端進程 |
euid | 有效用戶ID 進程執行者 |
stat | 進程狀態 |
ruid | 真實用戶ID 進程發起者 |
搜索進程
最靈活:ps 選項 | 其它命令按預定義的模式:pgrep
pgrep [options] pattern
-u uid: effective user,生效者-U uid: real user ,真正發起運行命令者-t terminal: 與指定終端相關的進程-l: 顯示進程名
# pgrep -t pts/1 -l
-a: 顯示完整格式的進程名(centos6無效)
# pgrep -t pts/0 -a
-P pid:顯示指定進程的子進程
# pgrep -P 3522 -l
按確切的程序名稱:/sbin/pidof$pidof bash
[root@lvasu ~]# pidof bash3457
系統工具
uptime: 顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1 、5 、10 分鐘的平均負載,一般不會超過1)
[root@lvasu ~]# uptime 23:47:00 up 2:05, 4 users, load average: 0.06, 0.05, 0.05
系統平均負載: 指在特定時間間隔內運行隊列中的平均進程數 。 如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。 如果每個CPU 內核的任務數大于5 ,那么這臺機器的性能有嚴重問題。 如果linux 主機是1 個雙核CPU 的話,當Load Average 為6 的時候說明機器已經被充分使用了。
進程管理工具
top :有許多內置命令:
排序: (CAPM)
P :以占據的CPU 百分比,%CPUM :占據內存百分比,%MEM T :累積占據CPU 時長,TIME+
首部信息顯示:
uptime 信息: l顯示 tasks 及cpu 信息:t 顯示 cpu 分別顯示:1 ( 數字)memory 信息:m 命令 退出命令:q修改刷新時間間隔:s # 單位s 終止指定進程:k 保存文件:W (CAPS) 位置 /root/.toprc
欄位信息簡介
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): 任務所有者IDUSER (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 時間,精確到秒
進程管理工具
選項:
-d #: 指定刷新時間間隔,默認為3秒 -b: 以批次方式(自動翻屏) -n #: 顯示多少批次(并且自動退出)
htop
命令:需從Fedora-EPEL 源安裝http://172.16.0.1/fedora-epel/7/x86_64 選項: -d #: 指定延遲時間; -u UserName: 僅顯示指定用戶的進程;-s COLUME: 以指定字段進行排序;子命令:(htop 界面實現) 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 codesy: Time spent running kernel codeid: 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
[root@lvasu ~]# cat /proc/1/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 logsc Sort processes by CPU% b Bytes or bits for network I/Om Sort processes by MEM% w Delete warning logsp Sort processes by name x Delete warning and critical logsi Sort processes by I/O rate 1 Global CPU or per-CPU statsd Show/hide disk I/O stats h Show/hide this help screenf Show/hide file system stats t View network I/O as combinationn 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 -s -B 10.1.27.100
客戶端模式: glances -c IPADDR IPADDR :要連入的服務器端地址
# glances -c 10.1.27.101
dstat 命令:系統資源統計
dstat [-afv] [options..] [delay [count]] -c: 顯示cpu 相關信息 -C #,#,...,total include cpu0, cpu3 and total -d: 顯示disk 相關信息 -D total,sda,sdb,... include hda and total -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 命令: 向進程發送控制信號,以實現對進程管理 顯示當前系統可用信號: kill -l 常用信號:man 7 signal 1) SIGHUP: 無須關閉進程而讓其重讀配置文件 2) SIGINT: 中止正在運行的進程;相當于Ctrl+c 9) SIGKILL: 殺死正在運行的進程 15) SIGTERM :終止正在運行的進程 (正常關閉,默認15) 18) SIGCONT :繼續運行 19) SIGSTOP :后臺休眠 指定信號的方法: (1) 信號的數字標識;1, 2, 9 (2) 信號完整名稱;SIGHUP (3) 信號的簡寫名稱;HUP 按PID :kill [-SIGNAL] pid … 按名稱:killall [-SIGNAL] comm…
# killall -9 ping
按模式:pkill [options] pattern -SIGNAL -u uid: effective user ,生效者 -U uid: real user ,真正發起運行命令者 -t terminal: 與指定終端相關的進程 -l: 顯示進程名 -a: 顯示完整格式的進程名 -P pid: 顯示父 進程為此處指定的進程的進程列表
# pkill -u root# pkill -9 -t pts/1
進程優先級
進程優先級調整: 靜態優先級:100-139 進程默認啟動時的nice值為0 ,優先級為120 只有根用戶才能降低nice值(提高優先性) nice 命令: nice [OPTION] [COMMAND [ARG]...] nice -n -5 htop renice 命令: renice [-n] priority pid... 運行中的進程 查看: ps axo pid,comm,ni
未涉及到的命令
sat,tsar,lostat,lftop,nethog,....
原創文章,作者:lvasu,如若轉載,請注明出處:http://www.www58058.com/45905