進程、系統性能和計劃任務

進程、系統性能和計劃任務

  • 進程管理和內存分配
  • 進程管理工具
  • 進程管理和性能相關工具

進程管理和內存分配

進程概念

  1. 內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
  2. Process: 運行中的程序的一個副本,是被載入內存的一個指令集合
    1. 進程ID(Process ID,PID)號碼被用來標記各個進程
    2. UID、GID、和SELinux語境決定對文件系統的存取和訪問權限
    3. 一般從執行進程的用戶來繼承
    4. 存在生命週期
  3. task struct:Linux內核存儲進程信息的數據結構格式
  4. task list:多個任務的的task struct組成的鏈表
  5. 進程建立:
    1. init:第一個進程
    2. 進程:都由其父進程建立,父子關係,CoW
      fork(), clone()

進程,線程和協程

進程相關概念

  1. Page Frame: 頁框,用存儲頁面數據,存儲Page 4k
  2. 物理地址空間和線性地址空間
  3. MMU:Memory Management Unit 負責轉換線性和物理地址
  4. TLB:Translation Lookaside Buffer 翻譯後備緩衝器
    1. 用於保存虛擬地址和物理地址映射關係的緩存
  5. LRU:Least Recently Used 近期最少使用算法,釋放內存

用戶和內核空間

進程的基本狀態和轉換

進程的基本狀態

  1. 建立狀態:進程在建立時須要申請一個空白PCB(process control block進程控
    制塊),向其中填寫控制和管理進程的信息,完成資源分配。若是建立工做沒法完
    成,好比資源沒法知足,就沒法被調度運行,把此時進程所處狀態稱爲建立狀態
  2. 就緒狀態:進程已準備好,已分配到所需資源,只要分配到CPU就可以當即運行
  3. 執行狀態:進程處於就緒狀態被調度後,進程進入執行狀態
  4. 阻塞狀態:正在執行的進程因爲某些事件(I/O請求,申請緩存區失敗)而暫時
    沒法運行,進程受到阻塞。在知足請求時進入就緒狀態等待系統調用
  5. 終止狀態:進程結束,或出現錯誤,或被系統終止,進入終止狀態。沒法再執行

狀態之間轉換六種狀況

  1. 運行——>就緒:1,主要是進程佔用CPU的時間過長,而系統分配給該進程佔
    用CPU的時間是有限的;2,在採用搶先式優先級調度算法的系統中,當有更高
    優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變爲
    就緒狀態
  2. 就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適
    的進程分配CPU
  3. 運行——>阻塞:正在執行的進程因發生某等待事件而沒法執行,則進程由執
    行狀態變爲阻塞狀態,如發生了I/O請求
  4. 阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列
  5. 如下兩種狀態是不可能發生的:
    1. 阻塞——>運行:即便給阻塞進程分配CPU,也沒法執行,操做系統在進行調
      度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
    2. 就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態

LRU算法

  1. 假設序列爲 4 3 4 2 3 1 4 2
    物理塊有3個,則
    1. 第1輪 4調入內存 4
    2. 第2輪 3調入內存 3 4
    3. 第3輪 4調入內存 4 3
    4. 第4輪 2調入內存 2 4 3
    5. 第5輪 3調入內存 3 2 4
    6. 第6輪 1調入內存 1 3 2
    7. 第7輪 4調入內存 4 1 3
    8. 第8輪 2調入內存 2 4 1

IPC進程間通訊

  1. IPC: Inter Process Communication
    1. 同一主機:
      1. pipe  管道
      2. socket 套接字文件
      3. signal 信號
      4. shm  shared memory
      5. semaphore  信號量,一種計數器
    2. 不一樣主機:
      1. socket IP和端口號
      2. RPC  remote procedure call
      3. 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)

進程狀態

  1. Linux內核:搶佔式多任務
  2. 進程類型:
    1. 守護進程: daemon,在系統引導過程當中啓動的進程,和終端無關進程
    2. 前臺進程:跟終端相關,經過終端啓動的進程
    3. 注意:二者可相互轉化
  3. 進程狀態:
    1. 運行態:running
    2. 就緒態:ready
    3. 睡眠態:
      1. 可中斷:interruptable
      2. 不可中斷:uninterruptable
    4. 中止態:stopped,暫停於內存,但不會被調度,除非手動啓動
    5. 僵死態:zombie,結束進程,父進程結束前,子進程不關閉

進程管理工具

  1. 進程的分類:
    1. CPU-Bound:CPU密集型,非交互
    2. IO-Bound:IO密集型,交互
  2. Linux系統狀態的查看及管理工具:
    1. pstree, ps, pidof, pgrep, top, htop,
      glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
  3. pstree命令:
    1. pstree display a tree of processes
  4. ps: process state
    1. ps  report a snapshot of the current processes
    2. Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中

查看進程 ps

  1. ps [OPTION]...
  2. 支持三種選項:
    1. UNIX選項 如-A -e
    2. BSD選項  如a
    3. GNU選項 如--help
  3. 選項:默認顯示當前終端中的進程
    1. 選項:默認顯示當前終端中的進程
    2.  x 選項包括不連接終端的進程
    3. u 選項顯示進程全部者的信息  有效用戶
    4. f 選項顯示進程樹,至關於 --forest
    5.  k|--sort 屬性 對屬性排序,屬性前加- 表示倒序
    6.  o 屬性… 選項顯示定製的信息 pid、cmd、%cpu、%mem
    7. ps axo %cpu,%mem,tty,cmd k -%mem(按內存倒序排列)
    8. ps axo pid,%cpu,%mem,tty,cmd --sort -%cpu

ps常見選項

ps 輸出屬性

進程管理和性能相關工具

搜索進程

  1. pgrep -t pts/1
  2. pgrep -lt pts/1
  3. pgrep -lU zhangsan
  4. pgrep -lu zhangsan
  5. pgrep -l 'ba.*'
  6. pgrep -al '^ba.*'
  7. pgrep -P 1

系統工具

進程管理工具

 

內存空間

 

 

系統監控工具

iostat、iftop、pmap、strace、lstrace

  1. strace 跟蹤某個程序運行時所調用的系統調用
  2. strace /bin/cat 這個命令用了哪部分系統調用
  3. ltrace /bin/cat cat程序運行時所調用的函數庫

glances

 

dstat

iotap

nload 查看網絡實時吞吐量

lsof

相關文章
相關標籤/搜索