Linux 进程资源分配,linux 进程管理和内存分配
1、進(jìn)程相關(guān)概念
進(jìn)程:正在運(yùn)行中的程序
內(nèi)核功用:進(jìn)程管理、文件系統(tǒng)、網(wǎng)絡(luò)功能、內(nèi)存管理、驅(qū)動(dòng)程序、安全功能等
Process:運(yùn)行中的程序的一個(gè)副本,是被載入內(nèi)存的一個(gè)指令集合
進(jìn)程 ID(Process ID,PID)號(hào)碼被用來標(biāo)記各個(gè)進(jìn)程
通常從執(zhí)行進(jìn)程的用戶來繼承,存在生命周期
task struct 任務(wù)結(jié)構(gòu)表:Linux 內(nèi)核存儲(chǔ)進(jìn)程信息的數(shù)據(jù)結(jié)構(gòu)格式
task list 任務(wù)列表:多個(gè)任務(wù)的 task struct 組成的鏈表
進(jìn)程創(chuàng)建:
都由其父進(jìn)程創(chuàng)建,父好關(guān)系,CoW(寫時(shí)復(fù)制,不發(fā)生改變時(shí)父子都指向同一文件;發(fā)生改變時(shí),則復(fù)制)
init:第一個(gè)進(jìn)程(centos6:init,centos7:systemd)
守護(hù)進(jìn)程:隨著計(jì)算機(jī)的開啟、關(guān)閉而隨之開啟、關(guān)閉。
2、進(jìn)程,線程和協(xié)程:
注:一個(gè)進(jìn)程里至少有一個(gè)線程;線程之間由操作系統(tǒng)進(jìn)行調(diào)度,包括進(jìn)程中使用的資源也由操作系統(tǒng)進(jìn)行調(diào)度;協(xié)程相當(dāng)于線程中的語句塊,由線程控制。
3、Page Frame:頁框,用存儲(chǔ)頁面數(shù)據(jù),存儲(chǔ) Page,每個(gè)進(jìn)程要使用的分配空間
虛擬內(nèi)存(線性內(nèi)存):進(jìn)程運(yùn)行的時(shí)候以為自己擁有了全部的內(nèi)存空間
物理地址空間和線性地址空間:
MMU:負(fù)責(zé)轉(zhuǎn)換線性和物理地址(虛擬內(nèi)存和物理內(nèi)存)
TLB:翻譯后備緩沖器,用于保存虛擬地址和物理地址映射關(guān)系的緩存
LRU:近期最少使用算法,釋放內(nèi)存
4、用戶空間和內(nèi)核空間:
5、進(jìn)程之間基本狀態(tài)和轉(zhuǎn)換:
創(chuàng)建狀態(tài):進(jìn)程在創(chuàng)建時(shí)需要申請(qǐng)一個(gè)空白 PCB(進(jìn)程控制塊),向其中填寫控制和管理進(jìn)程的信息,完成資源分配。如果創(chuàng)建工作無法完成,比如資源無法滿足,就無法被調(diào)度運(yùn)行,把此時(shí)進(jìn)程所處狀態(tài)稱為創(chuàng)建狀態(tài)。
就緒狀態(tài):進(jìn)程已準(zhǔn)備好,已分配到所需資源,只要分配到 CPU 就能夠立即運(yùn)行。
執(zhí)行狀態(tài):進(jìn)程處于就緒狀態(tài)被調(diào)度后,進(jìn)程進(jìn)入執(zhí)行狀態(tài)。
阻塞狀態(tài):正在執(zhí)行的進(jìn)程由于某些事件(I/O 請(qǐng)求,申請(qǐng)緩存區(qū)失敗)而暫時(shí)無法運(yùn)行,進(jìn)程受到阻塞,在滿足請(qǐng)求時(shí)進(jìn)入就緒狀態(tài)等待系統(tǒng)調(diào)用。
終止?fàn)顟B(tài):進(jìn)程結(jié)束,或出現(xiàn)錯(cuò)誤,或被系統(tǒng)終止,進(jìn)入終止?fàn)顟B(tài),無法再執(zhí)行。
狀態(tài)之間轉(zhuǎn)換六種情況:
運(yùn)行?→ 就緒:1,主要是進(jìn)程占用 CPU 的時(shí)間過長,而系統(tǒng)分配給該進(jìn)程占用 CPU 的時(shí)間是有限的;2,在采用搶先式優(yōu)先級(jí)調(diào)度算法的系統(tǒng)中,當(dāng)有更高優(yōu)先級(jí)的進(jìn)程要運(yùn)行時(shí),該進(jìn)程就被迫讓出 CPU,該進(jìn)程便由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。
就緒?→ 運(yùn)行:運(yùn)行的進(jìn)程的時(shí)間片用完,調(diào)度就轉(zhuǎn)到就緒隊(duì)列中選擇合適的進(jìn)程分配 CPU。
運(yùn)行?→ 阻塞:正在執(zhí)行的進(jìn)程因發(fā)生某等待事件而無法執(zhí)行,則進(jìn)程由執(zhí)行狀態(tài)變?yōu)樽枞麪顟B(tài)如發(fā)生了 I/O 請(qǐng)求。
阻塞?→ 就緒:進(jìn)程所等待的事件已經(jīng)發(fā)生,就進(jìn)入就緒隊(duì)列。
以下兩種狀態(tài)是不可能發(fā)生的:
阻塞?→ 運(yùn)行:即使給阻塞進(jìn)程分配 CPU,也無法執(zhí)行,操作系統(tǒng)在進(jìn)行調(diào)度時(shí),不會(huì)從阻塞隊(duì)列進(jìn)行挑選,而是從就緒隊(duì)列中選取。
就緒?→ 阻塞:就緒態(tài)根本就沒有執(zhí)行,談不上進(jìn)入阻塞態(tài)。
6、IPC 進(jìn)程間通信: 同一主機(jī):
pipe 管道,一個(gè)寫入管道文件,一個(gè)讀(單向)
socket 套接字文件,進(jìn)程間交換數(shù)據(jù)(雙工工作方式)
signal 信號(hào)
shm shared memory,共享內(nèi)存
semaphore 信號(hào)量,一種計(jì)數(shù)器,分配資源
不同主機(jī):
socket ip 和端口號(hào)
RPC 遠(yuǎn)程過程調(diào)用
MQ 消息隊(duì)列,如:Kafka , RabbitMQ,ActiveMQ
7、進(jìn)程優(yōu)先級(jí)
實(shí)時(shí)進(jìn)程(realtime),基于 FIFO 先進(jìn)先出或 RR 輪詢
非實(shí)時(shí)進(jìn)程:nice 按時(shí)間片分配進(jìn)程
取 139 個(gè)隊(duì)列,將相同優(yōu)先級(jí)的放在一個(gè)隊(duì)列中,運(yùn)行一個(gè)時(shí)間片后從運(yùn)行隊(duì)列轉(zhuǎn)至過期隊(duì)列。輪回運(yùn)行隊(duì)列和過期隊(duì)列互調(diào),再運(yùn)行。
進(jìn)程優(yōu)先級(jí):系統(tǒng)優(yōu)先級(jí):數(shù)字越小,優(yōu)先級(jí)越高0-139:各有 140 個(gè)運(yùn)行隊(duì)列和過期隊(duì)列 實(shí)時(shí)優(yōu)先級(jí):99-0 值最大優(yōu)先級(jí)最高
nice 值:-20 到 19,對(duì)應(yīng)系統(tǒng)優(yōu)先級(jí) 100-139
Big 0:時(shí)間復(fù)雜度,用時(shí)和規(guī)模的關(guān)系
0(1),O(logn),O(n)線性,O(n^2)拋物線,O(2^n)
8、進(jìn)程狀態(tài):
Linux 內(nèi)核:搶占式多任務(wù),按時(shí)間片分配任務(wù)
進(jìn)程類型:
守護(hù)進(jìn)程:daemon,在系統(tǒng)引|導(dǎo)過程中啟動(dòng)的進(jìn)程,和終端無關(guān)進(jìn)程
前臺(tái)進(jìn)程:跟終端相關(guān),通過終端啟動(dòng)的進(jìn)程,用戶執(zhí)行命令等
注意:兩者可相互轉(zhuǎn)化
進(jìn)程狀態(tài):
運(yùn)行態(tài):running
就緒態(tài):ready
睡眠態(tài):
可中斷:interruptable
不可中斷:uninterruptable
停止態(tài):stopped,暫停于內(nèi)存,但不會(huì)被調(diào)度,除非手動(dòng)啟動(dòng)
僵死態(tài):zombie,結(jié)束進(jìn)程,父進(jìn)程結(jié)束前,子進(jìn)程不關(guān)閉
9、進(jìn)程工具
9.1 系統(tǒng)管理工具:
進(jìn)程的分類:
CPU-Bound:CPU 密集型,非交互
編譯安裝、大量計(jì)算等
IO-Bound:IO 密集型,交互
拷貝大文件等 DMA:直接內(nèi)存訪問
Linux 系統(tǒng)狀態(tài)的查看及管理工具:pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
Linux 系統(tǒng)各進(jìn)程的相關(guān)信息均保存在 /proc/PID 目錄下的各文件中
9.2 進(jìn)程管理工具 PS 詳解:-A?---()
f?選項(xiàng)顯示進(jìn)程樹,相當(dāng)于--|--?屬性對(duì)屬性排序,屬性前加-%cpu、%
ps?axo?pid,%cpu,%mem,tty?k?%cpu
-C?cmdlist?指定命令,多個(gè)命令用,分隔,ps?-C?dd -L?顯示線程
-e?顯示所有進(jìn)程,相當(dāng)于-A
-f?顯示完整格式程序信息
-F?顯示更完整格式的進(jìn)程信息
-H?以進(jìn)程層級(jí)格式顯示進(jìn)程相關(guān)信息
-u?userlist?指定有效的用戶?ID?或名稱
-U?userlist?指定真正的用戶?ID?或名稱
-g?gid?或?groupname?指定有效的?gid?或組名稱
-G?gid?或?groupname?指定真正的?gid?或組名稱
-p?pid?顯示指?pid?的進(jìn)程
--ppid?pid?顯示屬于?pid?的子進(jìn)程
-M?顯示?SELinux?信息,相當(dāng)于?Z
PS?輸出屬性:
VSZ:Virtual?memory?SiZe,虛擬內(nèi)存集,線性內(nèi)存
RSS:ReSident?Size,常駐內(nèi)存集
STAT:進(jìn)程狀態(tài)
R:running
S:interruptable?sleeping,可中斷的休眠
D:uninterruptable?sleeping,不可中斷的休眠
T:stopped,停止態(tài)
Z:zombie,僵尸態(tài)
+:前臺(tái)進(jìn)程
|:多線程進(jìn)程
L:內(nèi)存分頁并帶鎖
N:低優(yōu)先級(jí)進(jìn)程
s:session?leader,會(huì)話?(子進(jìn)程)發(fā)起者
ps?優(yōu)先級(jí)選項(xiàng)和常用組合:
ni:nice?值
pri:priority?優(yōu)先級(jí),和系統(tǒng)優(yōu)先級(jí)相反
psr:processor?CPU?編號(hào),CPU(一級(jí)二級(jí),三級(jí)[共享]緩存)
更換?CPU?緩存失效,解決:綁定進(jìn)程和?CPU
taskset?-p?[進(jìn)程?ID],查看,命令顯示和?CPU?核數(shù)不一樣[二進(jìn)制]
tackset?-cp?1?[進(jìn)程?ID],綁定在?1?號(hào)?CPU?上?0,4?0-4?等
pidof?dd,查看?dd?命令的進(jìn)程編號(hào)
rtprio:實(shí)時(shí)優(yōu)先級(jí)
#?示例:
ps?axo?pid,cmd,psr,ni,pri,rtprio
#?常用組合:
aux
-ef
-eFH
-eo?pid,tid,class,rtprio,ni,pripsr,pcpu,stat,comm
axo?stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,commnice?-n?10?ping?192.168.129.142?????#?以指定優(yōu)先級(jí)運(yùn)行該命令renice?????#?更改優(yōu)先級(jí)
PS示例:-?-fg??-fp??-f?–ppid??-fp?,,?-ft?pts/?-p??-?-p??-o?comm=?-?-C?httpd,sshd?-o?pid=?-eo?comm,etime,user?|??-eo?pid,ppid,cmd,%mem,%cpu?--=-%mem?|??-eo?pid,ppid,cmd,%mem,%cpu?--=-%cpu?|?-?--?-eo?euser,ruser,suser,-n
搜素進(jìn)程:最靈活:?選項(xiàng)?|----t?pts/ ---/sbin/ ?bash
9.3 top 詳解%%+?信息:?|-d?#?指定刷新時(shí)間間隔,默認(rèn)為?---H?線程模式,示例:top?-H?-p?`?mysqld`
9.4 htop 詳解---|
10、內(nèi)存管理工具
10.1 free 命令詳解內(nèi)存空間使用狀態(tài):free?[OPTION]
-b?以字節(jié)為單位
-m?以?MB?為單位
-g?以?GB?為單位
-h?易讀格式
-0?不顯示-/+?buffers/cache?行
-t?顯示?RAM?+?swap?的總和
-s?n?刷新間隔為?n?秒
-c?n?刷新?n?次后即退出cat?/proc/sys/vm/drop_caches?????#?緩存為?0,重定向一個(gè)?3?進(jìn)去清理緩存
10.2 內(nèi)存工具 vmstat///-:Time?spent?idle.?Linux?.?前,包括?IO-??IO..?前?,包括?.-s:顯示內(nèi)存的統(tǒng)計(jì)數(shù)據(jù)
11、iostat 統(tǒng)計(jì)CPU和設(shè)備IO信息例:iostat?1?10
12、iftop 顯示帶寬使用情況,epel源例:iftop?-n?-i?eth1
13、pmap 命令:進(jìn)程對(duì)應(yīng)的內(nèi)存映射pmap?[options]?pid?[..]
-X:顯示詳細(xì)格式的信息例:pmap1
14、系統(tǒng)監(jiān)控工具
glances 命令: EPEL 源-bdehmnrsvyz1]?[-B?bind]?[-c?server]?[-C?conffile]?[-p?port]?[-P?password]?[---t?refresh]?[-f?]?[---d:關(guān)閉磁盤?I/-f?/path/to/-o?{HTML|-m:禁用?---/-s?--
dstat 命令詳解:系統(tǒng)資源統(tǒng)計(jì)
dstat 是一個(gè)可以取代vmstat,iostat,netstat和ifstat這些命令的多功能產(chǎn)品。#???dsta????--c,?----d,?---------------------top- --top---top---top-latency:延遲最大的進(jìn)程;
示例1:內(nèi)存資源使用情況
#?dstat?-glms?--top-mem
示例2:CPU資源使用情況
#?dstat?-cyl?--proc-count?--top-cpu
iotop 命令詳解:iotop?命令是一個(gè)用來監(jiān)視磁盤?I/O?使用狀況的?top?類工具?iotop?具有與?top?相似的?UI,其中包括?PID、用戶、I//-o,--only???????????只顯示正在產(chǎn)生I/-b,---n?NUM,--iter=-d?SEC,--delay=SEC??設(shè)置每次監(jiān)測(cè)的間隔,默認(rèn)1秒,接受非整形數(shù)據(jù)例如1. -p?PID,--pid=PID????指定監(jiān)測(cè)的進(jìn)程/-u?USER,--user=USER?指定監(jiān)測(cè)某個(gè)用戶產(chǎn)生的I/-P,---a,--accumulated????顯示累積的I/-k,--kilobytes??????使用kb單位,而不是對(duì)人友好的單位。在非交互模式下,腳本編程有用
iotop?常用參數(shù)和快捷鍵:
-t,--time???加上時(shí)間戳,非交互非模式
-q,?--quiet??禁止頭幾行,非交互模式,有三種指定方式
-q???????只在第一?次監(jiān)測(cè)時(shí)顯示列名
-qq??????永遠(yuǎn)不顯示列名
-qqq?????永遠(yuǎn)不顯示I/0匯總
交互按鍵:
left?和?right?方向鍵:改變排序
r:反向排序
0:切換至選項(xiàng)--only
p:切換至--processes選項(xiàng)
a:切換至--accumulated選項(xiàng)
q:退出
i:改變線程的優(yōu)先級(jí)
nload 查看網(wǎng)絡(luò)實(shí)時(shí)吞吐量:
nload 是一個(gè)實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)流量和帶寬使用情況,以數(shù)值和動(dòng)態(tài)圖展示進(jìn)出的流量情況安裝:?-y?+?毫秒,可通過--t?/s、一種是顯示?Byte/s,默認(rèn)是以?Bit/s,也可不顯示/-u?h|b|k|m|g|H|B|K|M|G?表示的含義:h:auto,b:Bit/s,k:kBit/s,m:MBit/s,H:auto,B:Byte/s,K:kByte/s,M:MByte/-u?M?eth0
lsof:list open files 查看當(dāng)前系統(tǒng)文件的工具--c--d+d+D:遞歸列出目錄下被打開的文件
lsof示例:
進(jìn)程管理:
查看由登陸用戶啟動(dòng)而非系統(tǒng)啟動(dòng)的進(jìn)程
lsof?/dev/pts/1
指定進(jìn)程號(hào),可以查看該進(jìn)程打開的文件
Isof?-p?9527
文件管理:
查看指定程序打開的文件
Isof?-c?httpd
查看指定用戶打開的文件
Isof?-u?root?|?more
查看指定目錄下被打開的文件
lsof?+D?/var/log/
lsof?+d?/var/log/
參數(shù)?+D?為遞歸列出目錄下被打開的文件,參數(shù)+d為列出目錄下被打開的文件
恢復(fù)刪除文件:
lsof?|?grep?delete?????#?查看打開文件(被誤刪除),看到進(jìn)程編號(hào),如:11863
ll?/proc/11863/fd??????#?查看文件描述符,如?4(已被刪除)
cat?/proc/11863/fd/4?>?/data/m.txt?????#?重定向找回文件
查看所有網(wǎng)絡(luò)連接:
lsof?-i?-n
lsof?-i@127.0.0.1
通過參數(shù)?-i?查看網(wǎng)絡(luò)連接的情況,包括連接的ip、端口等以及一些服務(wù)的連接情況,例如:sshd等。也可以通過指定?ip?查看該?ip?的網(wǎng)絡(luò)連接情況。
查看端口連接情況:
lsof?-i?:80?-n
通過參數(shù)?-i:端口?可以查看端口的占用情況,-i參數(shù)還有查看協(xié)議,ip的連接情況等
查看指定進(jìn)程打開的網(wǎng)絡(luò)連接:
lsof?-i?-n?-a?-p?9527
參數(shù)-i、-a、-p等,-i查看網(wǎng)絡(luò)連接情況,-a查看存在的進(jìn)程,-p指定進(jìn)程
查看指定狀態(tài)的網(wǎng)絡(luò)連接:
lsof?-n?-P?-i?TCP?-s?TCP:ESTABLISHED
-n:no?host?names,-P:no?port?names,-i?TCP指定協(xié)議,-s指定協(xié)議狀態(tài)通過多個(gè)參數(shù)可以清晰的查看網(wǎng)絡(luò)連接情況、協(xié)議連接情況等
15、進(jìn)程管理工具
kill 命令:向進(jìn)程發(fā)送控制信號(hào),以實(shí)現(xiàn)對(duì)進(jìn)程管理每個(gè)信號(hào)對(duì)應(yīng)一個(gè)數(shù)字,信號(hào)名稱以 SIG 開頭(可省略),不區(qū)分大小寫顯示當(dāng)前系統(tǒng)可用信號(hào):-I?或者?trap?-?)?SIGINT????中止正在運(yùn)行的進(jìn)程,相當(dāng)于?Ctrl+)?SIGQUIT???相當(dāng)于?ctrl+)信號(hào)的數(shù)字標(biāo)識(shí):,,?aux?查到該進(jìn)程?ID,?-?-?`?bc`????????????????按?PID:?[-?-?-?[-SIGNAL]?comm...???按模式:pkill?[options]?pattern????? -------P?pid:顯示指定進(jìn)程的子進(jìn)程
16、作業(yè)管理
Linux 的作業(yè)控制:
前臺(tái)作業(yè):通過終端啟動(dòng),且啟動(dòng)后一直占據(jù)終端
后臺(tái)作業(yè):可通過終端啟動(dòng),但啟動(dòng)后即轉(zhuǎn)入后臺(tái)運(yùn)行(釋放終端)
讓作業(yè)運(yùn)行于后臺(tái):
(1)運(yùn)行中的作業(yè):Ctrl+z,停止?fàn)顟B(tài)
(2)尚未啟動(dòng)的作業(yè):COMMAND &
后臺(tái)作業(yè)雖然被送往后臺(tái)運(yùn)行,但其依然與終端相關(guān);退出終端,將關(guān)閉后臺(tái)作業(yè)。如果希望送往后臺(tái)后,剝離與終端的關(guān)系:nohup?COMMAND?&>?/dev/null?&screen?;?COMMAND
查看當(dāng)前終端所有作業(yè): jobs
作業(yè)控制:fg?[[%]JOB_NUM]:把指定的后臺(tái)作業(yè)調(diào)回前臺(tái)
bg?[[%]JOB_?NUM]:讓送往后臺(tái)的作業(yè)在后臺(tái)繼續(xù)運(yùn)行kill?[%JOB_?NUM]:終止指定的作業(yè)killall?-19?ping???#?19?信號(hào)將后臺(tái)變?yōu)楹笈_(tái)休眠狀態(tài)killall?-18?ping???#?18?信號(hào)將后臺(tái)休眠變?yōu)楹笈_(tái)執(zhí)行
并行運(yùn)行:同時(shí)運(yùn)行多個(gè)進(jìn)程,提高效率方法??all.&&&
&);(f2.&);(f3.&&?f2.&?f3.&?&??&??&?}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Linux 进程资源分配,linux 进程管理和内存分配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为仿苹果字体_华为mate40系列再次
- 下一篇: login.html id=9453,S