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