實驗樓 Linux進程之管理控制

1、 進程的查看

咱們能夠經過 top 實時得查看進程的狀態,以及系統的一些信息(如 CPU、內存信息等),咱們還能夠經過 ps 來靜態查看當前的進程信息,同時咱們還可使用 pstree 來查看當前活躍進程的樹形結構。nginx

1.1 top 工具的使用

top 工具是咱們經常使用的一個查看工具,能實時的查看咱們系統的一些關鍵信息的變化:正則表達式

top 是一個在前臺執行的程序,因此執行後便進入到這樣的一個交互界面,正是由於交互界面咱們才能夠實時的獲取到系統與進程的信息。在交互界面中咱們能夠經過一些指令來操做和篩選。vim

top 顯示的第一排,緩存

內容 解釋
top 表示當前程序的名稱
11:05:18 表示當前的系統的時間
up 8 days,17:12 表示該機器已經啓動了多長時間
1 user 表示當前系統中只有一個用戶
load average: 0.29,0.20,0.25 分別對應一、五、15分鐘內cpu的平均負載

load average 在 wikipedia 中的解釋是 the system load is a measure of the amount of work that a computer system is doing 也就是對當前 CPU 工做量的度量,具體來講也就是指運行隊列的平均長度,也就是等待 CPU 的平均進程數相關的一個計算值。安全

假設咱們的系統是單 CPU、單內核的,把它比喻成是一條單向的橋,把CPU任務比做汽車。bash

  • load = 0 的時候意味着這個橋上並無車,cpu 沒有任何任務;
  • load < 1 的時候意味着橋上的車並很少,一切都仍是很流暢的,cpu 的任務並很少,資源還很充足;
  • load = 1 的時候就意味着橋已經被車給沾滿了,沒有一點空隙,cpu 的已經在全力工做了,全部的資源都被用完了,固然還好,這還在能力範圍以內,只是有點慢而已;
  • load > 1 的時候就意味着不只僅是橋上已經被車佔滿了,就連橋外都被佔滿了,cpu 已經在全力的工做了,系統資源的用完了,可是仍是有大量的進程在請求,在等待。如果這個值大於2,大於3,超過 CPU 工做能力的 2,3。而如果這個值 > 5 說明系統已經在超負荷運做了。

這是單個 CPU 單核的狀況,而實際生活中咱們須要將獲得的這個值除以咱們的核數來看。咱們能夠經過一下的命令來查看 CPU 的個數與核心數session

#查看物理CPU的個數 #cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l #每一個cpu的核心數 cat /proc/cpuinfo |grep "physical id"|grep "0"|wc -l

一般咱們都會先看 15 分鐘的值來看這個大致的趨勢,而後再看 5 分鐘的值對比來看是否有降低的趨勢多線程

 

top 的第二行數據,基本上第二行是進程的一個狀況統計工具

內容 解釋
Tasks: 26 total 進程總數  
1 running 1個正在運行的進程數
25 sleeping 25個睡眠的進程數
0 stopped  沒有中止的進程數
0 zombie 沒有殭屍進程數

來看 top 的第三行數據,這一行基本上是 CPU 的一個使用狀況的統計了ui

內容 解釋
Cpu(s): 1.0%us 用戶空間進程佔用CPU百分比
1.0% sy 內核空間運行佔用CPU百分比
0.0%ni 用戶進程空間內改變過優先級的進程佔用CPU百分比
97.9%id 空閒CPU百分比
0.0%wa 等待輸入輸出的CPU時間百分比
0.1%hi 硬中斷(Hardware IRQ)佔用CPU的百分比
0.0%si 軟中斷(Software IRQ)佔用CPU的百分比
0.0%st (Steal time) 是 hypervisor 等虛擬服務中,虛擬 CPU 等待實際 CPU 的時間的百分比

CPU 利用率是對一個時間段內 CPU 使用情況的統計,經過這個指標能夠看出在某一個時間段內 CPU 被佔用的狀況,而 Load Average 是 CPU 的 Load,它所包含的信息不是 CPU 的使用率情況,而是在一段時間內 CPU 正在處理以及等待 CPU 處理的進程數狀況統計信息,這兩個指標並不同。

來看 top 的第四行數據,這一行基本上是內存的一個使用狀況的統計了:

內容 解釋
8176740 total 物理內存總量
8032104 used 使用的物理內存總量
144636 free 空閒內存總量
313088 buffers 用做內核緩存的內存量

注意

系統的中可用的物理內存最大值並非 free 這個單一的值,而是 free + buffers + swap 中的 cached 的和

來看 top 的第五行數據,這一行基本上是交換區的一個使用狀況的統計了

內容 解釋
total 交換區總量
used 使用的交換區總量
free 空閒交換區總量
cached 緩衝的交換區總量,內存中的內容被換出到交換區,然後又被換入到內存,但使用過的交換區還沒有被覆蓋

在下面就是進程的一個狀況了

列名 解釋
 PID 進程id
USER 該進程的所屬用戶
PR 該進程執行的優先級 priority 值
NI 該進程的 nice 值
VIRT 該進程任務所使用的虛擬內存的總數
RES 該進程所使用的物理內存數,也稱之爲駐留內存數
SHR 該進程共享內存的大小
S 該進程進程的狀態: S=sleep R=running Z=zombie
%CPU 該進程CPU的利用率
%MEM 該進程內存的利用率
TIME+ 該進程活躍的總時間
COMMAND 該進程運行的名字

注意

NICE 值叫作靜態優先級,是用戶空間的一個優先級值,其取值範圍是-20至19。這個值越小,表示進程」優先級」越高,而值越大「優先級」越低。nice值中的 -20 到 19,中 -20 優先級最高, 0 是默認的值,而 19 優先級最低

PR 值表示 Priority 值叫動態優先級,是進程在內核中實際的優先級值,進程優先級的取值範圍是經過一個宏定義的,這個宏的名稱是 MAX_PRIO,它的值爲 140。Linux 實際上實現了 140 個優先級範圍,取值範圍是從 0-139,這個值越小,優先級越高。而這其中的 0 - 99 是實時進程的值,而 100 - 139 是給用戶的。

其中 PR 中的 100 to 139 值部分有這麼一個對應 PR = 20 + (-20 to +19),這裏的 -20 to +19 即是nice值,因此說兩個雖然都是優先級,並且有千絲萬縷的關係,可是他們的值,他們的做用範圍並不相同

VIRT 任務所使用的虛擬內存的總數,其中包含全部的代碼,數據,共享庫和被換出 swap空間的頁面等所佔據空間的總數

在上文咱們曾經說過 top 是一個前臺程序,因此是一個能夠交互的

經常使用交互命令 解釋
q 退出程序
I 切換顯示平均負載和啓動時間的信息
P 根據CPU使用百分比大小進行排序
M 根據駐留內存大小進行排序
i 忽略閒置和僵死的進程,這是一個開關式命令
k 終止一個進程,系統提示輸入 PID 及發送的信號值。通常終止進程用 15 信號,不能正常結束則使用 9 信號。安全模式下該命令被屏蔽。

1.2 ps 工具的使用

使用 -l 參數能夠顯示本身此次登錄的 bash 相關的進程信息羅列出來

ps -l

羅列出全部的進程信息

ps aux 

如果查找其中的某個進程的話,咱們還能夠配合着 grep 和正則表達式一塊兒使用

ps aux | grep zsh 

以查看時將連同部分的進程呈樹狀顯示出來

ps axjf 

自定義咱們所須要的參數顯示

ps -afxo user,ppid,pid,pgid,command 
內容 解釋
F 進程的標誌(process flags),當 flags 值爲 1 則表示此子程序只是 fork 但沒有執行 exec,爲 4 表示此程序使用超級管理員 root 權限
USER 進程的擁有用戶
PID 進程的 ID
PPID 其父進程的 PID
SID session 的 ID
TPGID 前臺進程組的 ID
%CPU 進程佔用的 CPU 百分比
%MEM 佔用內存的百分比
NI 進程的 NICE 值
VSZ 進程使用虛擬內存大小
RSS 駐留內存中頁的大小
TTY 終端 ID
S or STAT 進程狀態
WCHAN 正在等待的進程資源
START   啓動進程的時間
TIME 進程消耗CPU的時間
COMMAND 命令的名稱和參數 

TPGID欄寫着-1的都是沒有控制終端的進程,也就是守護進程

STAT表示進程的狀態,而進程的狀態有不少,以下表所示

狀態 解釋
R Running.運行中
S Interruptible Sleep.等待調用
D Uninterruptible Sleep.不可中斷睡眠
T Stoped.暫停或者跟蹤狀態
X Dead.即將被撤銷
Z Zombie.殭屍進程
W Paging.內存交換
N 優先級低的進程
< 優先級高的進程
s 進程的領導者
L 鎖定狀態
l 多線程狀態
+ 前臺進程

其中的 D 是不能被中斷睡眠的狀態,處在這種狀態的進程不接受外來的任何 signal,因此沒法使用 kill 命令殺掉處於D狀態的進程,不管是 killkill -9 仍是 kill -15,通常處於這種狀態多是進程 I/O 的時候出問題了。

1.3 pstree 工具的使用

經過 pstree 能夠很直接的看到相同的進程數量,最主要的仍是咱們能夠看到全部進程的之間的相關性。

#參數選擇: #-A :各程序樹之間以 ASCII 字元來連接; #-p :同時列出每一個 process 的 PID; #-u :同時列出每一個 process 的所屬帳戶名稱。

2、進程的管理

2.1 kill 命令的掌握

直接對 pid 下手

#首先咱們使用圖形界面打開了 gedit、gvim,用 ps 能夠查看到 ps aux #使用9這個信號強制結束 gedit 進程 kill -9 1608 #咱們在查找這個進程的時候就找不到了 ps aux | grep gedit 

2.2 進程的執行順序

nice 的值咱們是能夠經過 nice 命令來修改的,而須要注意的是 nice 值能夠調整的範圍是 -20 ~ 19,其中 root 有着至高無上的權力,既能夠調整本身的進程也能夠調整其餘用戶的程序,而且是全部的值均可以用,而普通用戶只能夠調製屬於本身的進程,而且其使用的範圍只能是 0 ~ 19,由於系統爲了不通常用戶搶佔系統資源而設置的一個限制

nice -n -5 vim &

咱們還能夠用 renice 來修改已經存在的進程的優先級,一樣由於權限的緣由在實驗環境中沒法嘗試

renice -5 pid 
相關文章
相關標籤/搜索