內核的功能:
進程管理 文件系統 網絡功能 內存管理 驅動程序 安全功能等
rocess:運行中的程序的一個副本,是被載入內存的一個指令集合
進程ID(Process ID,PID)號碼被用來標記各個進程 UID,GID,和SElinux語境決定對文件系統的存取和訪問權限,通常從執行進程的用戶來繼承,存在生命周期。
task struct:Linux內核存儲進程信息的數據結構格式
task list:多個任務的task Struct組成的鏈表
進程創建:
init:第一個進程
父子進程
進程:
都由其父進程創建,COW
fork(),clone()
進程優先級:
系統優先級:數字越小,優先級越高
0-139(centos4,5)
各有140個運行隊列和過期隊列
0-98,99(centos6)
實時優先級: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
停止態:stopped 暫停于內存中,但不會被調度,除非手動啟動
將死態:zombie 結束進程,父進程結束前,子進程不關閉
睡眠態:
可中斷:interruptable
不可中斷:uninterruptable
進程的分類:
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目錄下的各文件中
支持三種選項:
unix選項 如-A -e
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
+:前臺進程
I:多線程進程
N:低優先級進程
<:高優先級進程
s:session leader 會話(子進程)發起者
常用組和:-ef
-e:顯示所有進程
-f:顯示完整格式程序信息
常用組和:-eFH
-F:顯示更完整格式的進程信息
-H:以進程層級格式顯示進程相關信息
常用組和:自定義
-eo:顯示所有進程, 定制屬性 例如:[root@nzg7 ~]# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
-axo: 所有終端所有進程,定制屬性 例如:[root@nzg7 ~]# ps -axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ni:nice值
pri:priority,優先級
psr:processor,cpu編號
rtprio:實時優先級
最靈活:ps 選項 | 其他命令
按預定義的模式:pgrep
pgrep [options] pattern
-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信息: |命令
tasks及cpu信息:+命令
cpu分別顯示: 1(數字)
Memory信息: m命令
退出命令: q
修改刷新時間間隔:s
終止指定進程:k
保存文件:W
欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閑
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
s+:虛擬機偷走的時間
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時間,精確到秒
選項:
-d #:指定刷新時間間隔,默認3秒
-n #:以批次方式
-b:以批次方式
-u User:僅顯示指定用戶的進程
-sCOLUME:以指定字段進行排序
#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 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: 顯示內存的統計數據
dstat命令:
dstat [-afv] [options..] [delay[count]]
-c:顯示cpu相關信息
-d:顯示disk的相關信息
-g;顯示page相關統計數據
-m:顯示Memory相關統計數據
-n:顯示network相關統計數據
-p:顯示process相關統計數據
-r:顯示io請求相關的統計數據
-s:顯示swapped相關的統計數據
–tcp tcp鏈接數
–udpudp鏈接數
–socket 查看詳細監控信息
–top-cpu:顯示最占用cpu的進程
–top-io:顯示最占用io的進程
–top-mem:顯示最占用內存的進程
–top-latency:顯示延遲最大的進程
進程管理工具
kill:
向進程發送控制信號 ,以實現對進程管理
顯示當前系統可用信號:kill -1
常用信號: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,生效者
-Uuid:real user,真正發起運行命令著
-t terminal:與指定終端相關的進程
-l:顯示進程名
-a:顯示完整格式的進程名
-p pid:顯示父進程為此處指定的進程的進程列表
linux作業控制:
前臺作業:通過終端啟動,且啟動后一直占據終端
后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
如何讓作業運行在后臺?
運行中的作業:ctrl+z
尚未啟動的作業:COMMand &
后臺作業雖然被送往后臺運行,但其依然與終端相關,退出終端,將關閉后臺作業,如果希望送往后臺后,剝離與終端的關系
#nohup COMMAND& #screen:COMMAND
查看所有作業;
jobs
作業控制:
#fg [[%]JOB_NUM]:把指定的后臺作業調回前臺
#bg [[%]JOB_NUM]: 讓送往后臺的作業在后臺繼續運行
#kill [%JOB_NUM]: 終止指定的作業
進程優先級:
默認優先級:100-139
進程默認啟動時的nice值為0,優先級為120
只有根用戶才能降低nice值(提高優先級)
nice命令:
nice [OPTION] [COMMAND [ARG]…]
renice命令:
renice [-n] priority pid…
查看:
ps axo pid,comm,ni
原創文章,作者:鬧鐘哥,如若轉載,請注明出處:http://www.www58058.com/45692