進程、系統性能和計劃任務
- 進程管理和內存分配
- 進程管理工具
- 進程管理和性能相關工具
進程管理和內存分配
進程概念
- 內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
- Process: 運行中的程序的一個副本,是被載入內存的一個指令集合
- 進程ID(Process ID,PID)號碼被用來標記各個進程
- UID、GID、和SELinux語境決定對文件系統的存取和訪問權限
- 一般從執行進程的用戶來繼承
- 存在生命週期
- task struct:Linux內核存儲進程信息的數據結構格式
- task list:多個任務的的task struct組成的鏈表
- 進程建立:
- init:第一個進程
- 進程:都由其父進程建立,父子關係,CoW
fork(), clone()
進程,線程和協程
進程相關概念
- Page Frame: 頁框,用存儲頁面數據,存儲Page 4k
- 物理地址空間和線性地址空間
- MMU:Memory Management Unit 負責轉換線性和物理地址
- TLB:Translation Lookaside Buffer 翻譯後備緩衝器
- 用於保存虛擬地址和物理地址映射關係的緩存
- LRU:Least Recently Used 近期最少使用算法,釋放內存
用戶和內核空間
進程的基本狀態和轉換
進程的基本狀態
- 建立狀態:進程在建立時須要申請一個空白PCB(process control block進程控
制塊),向其中填寫控制和管理進程的信息,完成資源分配。若是建立工做沒法完
成,好比資源沒法知足,就沒法被調度運行,把此時進程所處狀態稱爲建立狀態
- 就緒狀態:進程已準備好,已分配到所需資源,只要分配到CPU就可以當即運行
- 執行狀態:進程處於就緒狀態被調度後,進程進入執行狀態
- 阻塞狀態:正在執行的進程因爲某些事件(I/O請求,申請緩存區失敗)而暫時
沒法運行,進程受到阻塞。在知足請求時進入就緒狀態等待系統調用
- 終止狀態:進程結束,或出現錯誤,或被系統終止,進入終止狀態。沒法再執行
狀態之間轉換六種狀況
- 運行——>就緒:1,主要是進程佔用CPU的時間過長,而系統分配給該進程佔
用CPU的時間是有限的;2,在採用搶先式優先級調度算法的系統中,當有更高
優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變爲
就緒狀態
- 就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適
的進程分配CPU
- 運行——>阻塞:正在執行的進程因發生某等待事件而沒法執行,則進程由執
行狀態變爲阻塞狀態,如發生了I/O請求
- 阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列
- 如下兩種狀態是不可能發生的:
- 阻塞——>運行:即便給阻塞進程分配CPU,也沒法執行,操做系統在進行調
度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
- 就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態
LRU算法
- 假設序列爲 4 3 4 2 3 1 4 2
物理塊有3個,則
- 第1輪 4調入內存 4
- 第2輪 3調入內存 3 4
- 第3輪 4調入內存 4 3
- 第4輪 2調入內存 2 4 3
- 第5輪 3調入內存 3 2 4
- 第6輪 1調入內存 1 3 2
- 第7輪 4調入內存 4 1 3
- 第8輪 2調入內存 2 4 1
IPC進程間通訊
- IPC: Inter Process Communication
- 同一主機:
- pipe 管道
- socket 套接字文件
- signal 信號
- shm shared memory
- semaphore 信號量,一種計數器
- 不一樣主機:
- socket IP和端口號
- RPC remote procedure call
- MQ 消息隊列,如:Kafka,RabbitMQ,ActiveMQ
進程優先級
修改 nice 值ios
nice -10 ping 127.2 表示nice的優先級改成10算法
nice --10 ping 127.2 表示 nice的優先級改成-10緩存
taskset -p 12243 //查看進程號爲12243的程序在哪幾顆cpu上運行安全
taskset -cp 0,1 12243 //進程號爲12243的程序只能在第0或1顆cpu上運行網絡
- 進程優先級:
- 系統優先級:數字越小,優先級越高
0-139:各有140個運行隊列和過時隊列
實時優先級: 99-0 值最大優先級最高
nice值:-20到19,對應系統優先級100-139
- Big O:時間複雜度,用時和規模的關係
O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)
進程狀態
- 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 [OPTION]...
- 支持三種選項:
- UNIX選項 如-A -e
- BSD選項 如a
- GNU選項 如--help
- 選項:默認顯示當前終端中的進程
- 選項:默認顯示當前終端中的進程
- x 選項包括不連接終端的進程
- u 選項顯示進程全部者的信息 有效用戶
- f 選項顯示進程樹,至關於 --forest
- k|--sort 屬性 對屬性排序,屬性前加- 表示倒序
- o 屬性… 選項顯示定製的信息 pid、cmd、%cpu、%mem
- ps axo %cpu,%mem,tty,cmd k -%mem(按內存倒序排列)
- ps axo pid,%cpu,%mem,tty,cmd --sort -%cpu
ps常見選項
ps 輸出屬性
進程管理和性能相關工具
搜索進程
- pgrep -t pts/1
- pgrep -lt pts/1
- pgrep -lU zhangsan
- pgrep -lu zhangsan
- pgrep -l 'ba.*'
- pgrep -al '^ba.*'
- pgrep -P 1
系統工具
進程管理工具
內存空間
系統監控工具
iostat、iftop、pmap、strace、lstrace
- strace 跟蹤某個程序運行時所調用的系統調用
- strace /bin/cat 這個命令用了哪部分系統調用
- ltrace /bin/cat cat程序運行時所調用的函數庫
glances
dstat
iotap
nload 查看網絡實時吞吐量
lsof