Linux進程管理命令和性能監控工具的應用

概述

監控系統的各方面的性能,保障各類服務的有序運行,是運維工作的重要組成部分,本篇就介紹了一些常用的系統監控命令和相關參數的說明

具體包含一下幾個部分 
1.進程管理基礎 
2.進程管理工具(ps,top,htop,kill) 
3.內存監控類工具(vmstat,pmap) 
4.系統監控累工具(glances,dstat)


一,進程管理基礎概念

  1. 進程

內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等

Process:運行中的程序的一個副本,是被載入內存的一個指令集合,因為程序可能會同時被運行 
多次,故可以理解為一個副本.

進程ID(Process ID,PID)號碼被用來標記各個進程

UID,GID和SELinux語境決定進程對文件系統的存取和訪問權限,通常從執行進程的用戶來繼承

每個進程都存在生命周期:從創建開始,到運行結束就是整個進程的一個生命周期,而程序是個靜態的文件.

task struct(任務結構體):Linux內核存儲進程信息的數據結構格式

task list(任務列表):多個任務的task struct組成的鏈表

  1. CPU的工作模式

CPU的工作模式:每臺服務器有很多進程等待CPU來處理,每個進程都必須輪流讓CPU來處理,如果第一個進程一直霸占著CPU不放,就會導致后面的進程一直無法處理,所以就有了優先級最大的內核來調度分配,所以可以總結為

CPU是分時的:一個進程可占用多少CPU的時長,一個CPU在同一時刻只能執行一個任務,CPU自身的寄存器中存放著正在運行的進程的狀態信息,當該進程分配的時間片內沒有完成任務時,也會被內核調度出去,去執行下一個進程,但是之前沒有完成任務的進程數據不會就此丟失,而是會放到內核指定的一個task struct(任務結構體)來存放進程信息,這就稱為保存現場,當再一次輪到這個沒有完成的進程到CPU執行時,內核就會再度調回這個保存現場的數據(這就被稱為恢復現場),來繼續執行,直到完成任務.

保存現場就是當正在運行的進程,CPU運行時間到達之后,將進程運行的狀態等信息,由內核調度存儲到內存中,這就是保存現場

恢復現場就是之前保存過的進程的運行狀態的信息,當該進程又獲得CPU運行時間時,將保存的狀態信息調度到CPU上,這樣CPU就能根據保存的狀態繼續運行進程,而不是從頭開始運行進程

存儲的進程的任務結構體很多,所以就有了task list(任務列表),而進程ID就是來排序這個任務列表

  1. 內存的工作模式

內存的工作模式也是分空間的:一個進程可占用多少內存空間,內存分配方式有點類似磁盤,分成很多塊,但內存不叫塊,而是叫頁框(page frame)用于存儲頁面數據,一般一個page的大小為4K。分配的頁框可以有多個,且可以不連續。

進程需要用到內存數據的時候,怎么去找內存中不連續的數據? 
因為數據在實際內存中可以不連續,也就是離散的,故一般情況下,內核會虛擬一個內存空間面向進程,進程不需要直接與實際的物理存儲的內存打交道,只需與內核虛擬出來的內存打交道,內核虛擬出來的內存的大小,與計算機平臺的位數有關系,一般32位系統上,單個進程虛擬出來的內存大小為4G,1G給內核使用,3G給該進程使用;64位系統上,單個進程虛擬出來的內存大小為4G,內核虛擬出來的內存空間叫做線性地址空間,內核虛擬出來的內存對進程而言是連續,且獨占的。這樣,進程讀寫內存數據時就認為自己讀取的是一個連續的地址空間,且是獨占的,這段虛擬出來的空間中,只有真正被使用的部分,內核才會在物理內存上分配空間進行存儲

swap分區:為了防止過多的進程將實際物理內存占滿導致程序無法運行,從而有了swap交換分區的概念,swap分區實際是用來臨時存放內存中暫時用不到的頁面數據。置換時,通常采用LRU算法(最近最少使用)將最近最少用到的數據暫存在交換分區中

不能交換的進程稱為常駐進程集,能夠被交換的進程稱為虛擬進程集

一次磁盤IO分為兩段進行,第一段是將數據從磁盤拿到內存中內核空間,第二段時將內核空間的數據復制一份放到用戶空間

LRU:Least Recently Used 近期最少使用算法,釋放內存物理地址空間和線性地址空間

MMU:Memory Management Unit負責轉換線性和物理地址

  1. Linux上進程創建模型

進程創建

在系統啟動成功之后內核就會創建第一個進程,它就是父進程,后續的進程都由其創建 
init進程:初始化進程,后續的所有用戶空間進程管理者(所有進程的父進程)

其他進程:除了init進程之外,所有進程都由父進程創建,父進程利用fork()系統調用生成,每個進程都是由父進程fork()自身而來,會clone()自身的數據給子進程

當父進程創建子進程時,子進程和父進程使用的是同一段內存空間;一旦子進程需要對該段內存空間的數據進行修改時,就會復制該段內存空間的數據到另外一段內存空間,子進程就指向了該段新的內存空間

這種機制叫CoW(寫時復制),如果子進程不對數據進程修改,跟父進程使用的內存空間都是同一個,但是一旦子進程要修改數據,就復制一份數據到另一塊內存供子進程單獨使用,而從此之后,子進程就一直使用新的內存空間了

進程的終止:子進程完成一定的任務之后,釋放掉自己占用的資源,然后父進程對子進程進行回收

  1. 進程的優先級

基于linux2.6的內核將優先級劃分為固定個數 
0-139 
1-99:實時優先級;

100-139:靜態優先級; 
數字越小,優先級越高;

Nice值: 
-20-19分別對應100-139,進程初始時nice值默認都為0,普通用戶只能調低自己的優先級,也就是加大自己的nice值,而管理員用戶可以任意指定 
修改進程優先級:nice、renice 
可調整的區間為100-139

通過調整nice值可以調整進程的優先級:

nice值的范圍為-20到19,分別對應進程優先級的100-139

進程啟動時的默認nice值都為0,故其默認優先級為120

普通用戶:只能調大nice值,也就是降低優先級,不能低于0 
管理員:可以任意調整nice值-20到19 
怎么調整優先級:

對于尚未啟動的程序: 
nice -n 數字 COMMAND 
表示啟動程序時,以指定的數字作為其nice值

1.[root@localhost ~]# >>nice -n -5 vim wang &
2.[2] 23107
3.[root@localhost ~]# >>ps axo ni,pri,pid,command| grep wang
4.-5  24  23107 vim wang
5.0  19  23111 grep --color=auto wang  

對于已經啟動的進程: 
renice 數字 PID 
表示對指定的PID進程調整其nice值為指定數字

1.    [root@localhost ~]# >>vim mage &
2.    [1] 23045
3.    [root@localhost ~]# >>ps axo ni,pri,pid,command| grep vim
4.     0  19  23045 vim mage
5.     0  19  23047 grep --color=auto vim
6.    [1]+  Stopped                 vim mage
7.    [root@localhost ~]# >>renice -5 23045
8.    23045 (process ID) old priority 0, new priority -5
9.    [root@localhost ~]# >>ps axo ni,pri,pid,command| grep vim
10.    -5  24  23045 vim mage
11.    0  19  23050 grep --color=auto vim

Big O:時間復雜度,用時和規模的關系 
O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n) 
大O 就是 時間復雜度。 
時間復雜度是大概的描述一個算法的用時(實際上從側面的表達了他的效率) 
你可以 把它 看成函數 y = f(x)一樣。 
O(n)中的n 代表 規模大小,這也表明了,時間復雜度 跟 規模的關系。 
最好時間復雜度,通常指在最好情形下,這個算法用時。反之,最壞情況下的就是最壞時間復雜度。

  1. 進程隊列

Linux內核為了能夠快速的實現這些優先級不同的進程的調度,將待運行的進程按照對應的優先級分成了140個運行隊列,每個優先級相同的進程為同一個隊列,這樣,內核進行調度時,不需要遍歷整個隊列,而是按照優先級從高到低,取隊列的第一個進程進行調度

同時也有140個過期隊列,就是將上面運行隊列中,調度過的進程,在為其分配的CPU時間片的時間內尚未運行完成,就放到了過期隊列,當同優先級的運行隊列中的進程都被調度完成后,就會重新調度過期隊列,此時過期隊列就變成了運行隊列

  1. 進程間通信機制(IPC: Inter Process Communication)

同一主機上: 
signal:可以通過發送信號(通過kill命令) 
shm(shared memory):共享內存 
semerphor:信號量,一種計數器 
不同主機上: 
rpc(remote procedure call):遠程過程調用 
socket:rpc也是基于socket調用,套接字通信機制.IP和端口號

  1. linux內核:搶占式多任務

進程類型 
守護進程:daemon,跟終端無關,由內核在系統引導過程中啟動的進程 
用戶前臺進程:用戶通過終端啟動的進程,跟終端相關 
注意:也可把前臺啟動的進程收網后臺,以守護模式運行

進程的狀態 
運行態:running,進程正在運行中 
就緒態:ready,可以運行但尚未被運行 
睡眠態:sleeping 
可中斷睡眠:interruptible,調度到CPU上可立即運行起來 
不可中斷睡眠:uninterruptible 通常是指被IO阻塞的進程,等待IO滿足之前無法繼續運行 
僵死態:zombie,找不到歸屬,父進程沒有回收該進程,父進程就掛了 
停止態:stopped 暫停于內存中,不可被調度并運行

一次磁盤IO分為兩段進行,第一段是將數據從磁盤拿到內存中內核空間,第二段時將內核空間的數據復制一份放到用戶空間

  1. 線程相關概念

線程:是一個進程內部的多個執行流,一個執行流就叫一個線程

一個進程只有一個執行流,也可以有線程,這種模式就叫單進程單線程模型

一個進程有多個執行流,就叫單進程多線程模型

如果一個進程有多個執行流,也就是有多個線程,但是如果只有1個CPU,那么也多線程也沒有任何意義,因為一個cpu在同一時刻只能同時執行一個任務

同一個進程內部的多個線程,可以共享內存空間。比如web服務,如果是單進程模型,一個進程相應一個用戶請求,如果100個用戶請求的都是index.html頁面,那么在內存上就需要為每個進程存放都存放一個index.html的數據,這樣就造成了內存浪費,但是如果是采用單進程多線程模式,這樣利用一個線程相應一個用戶請求,這樣就只需要為這個進程在內存上存儲一份index.html的數據,然后多個線程共享這段數據,這樣就大大節約了內存的空間

Linux原生對線程的支持性不是特別好

一個進程的數據部分分為指令和數據,程序在執行時,內存中的數據也分指令數據和實際的數據,其中指令數據和部分的實際數據,是不能被交換到交換分區上的,稱之為常駐內存集,而有些數據是可以被交換到交換分區上的,稱之為虛擬內存集

第二章 進程管理類工具(ps、top、htop、kill)

1、ps命令(ps、pgrep、pidof) 
ps命令:顯示系統當前進程的運行情況,實際是將/proc/目錄下的各個進程相關的信息轉換為我們易讀模式展現出來

選項與參數

-A 所有的進程都顯示出來,與-e具有同樣的效果 
a 與終端無關的所有進程 
u 以用戶為中心顯示與用戶相關的進程信息 
x 通常與a一起使用,可列出較完整的信息

輸出格式定義:

l 列出詳細的信息 
j 工作的格式 
-f 完整格式列表,做一個更為完整的輸出 
o 屬性選項顯示定制的信息: 
psr 當前進程運行的CPU編號(四顆CPU就是0、1、2、3) 
pri 當前進程的優先級 
ni 當前進程的nce值(-20,19),nice值越低,優先級越高 
pid 進程號 
command 發起進程的命令 
state 進程狀態 
%cpu 占用CPU的百分比 
%mem 占用內存的百分比 
tty 占用的終端 
euser 進程的有效用戶 
ruser 進程的實際用戶

有效用戶和實際用戶可用于驗證設置了SUID權限的二進制程序文件運行時,有效用戶為進程文件的屬主用戶,實際用戶為運行程序文件的用戶

常用的組合方式:

ps -ef 以完整的信息顯示所有進程的信息 
ps aux 
ps axo 
ps aux的顯示出來的參數的意義

1.[root@localhost ~]# >>ps aux
2.USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
3.root          1  0.0  0.6 125948  6708 ?        Ss   Sep25   0:05 /usr/lib/systemd/systemd --switched-ro
4.root          2  0.0  0.0      0     0 ?        S    Sep25   0:00 [kthreadd]
5.root          3  0.0  0.0      0     0 ?        S    Sep25   0:00 [ksoftirqd/0]
6.root          6  0.0  0.0      0     0 ?        S    Sep25   0:01 [kworker/u256:0]
7.root          7  0.0  0.0      0     0 ?        S    Sep25   0:00 [migration/0]
8.root          8  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcu_bh]
9.root          9  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/0]
10.root         10  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/1]
11.root         11  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/2]
12.root         12  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/3]
13.root         13  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/4]
14.root         14  0.0  0.0      0     0 ?        S    Sep25   0:00 [rcuob/5]
15.----------------------------------------------
16.USER:進程的發起者
17.PID:進程號
18.%CPU:進程占用掉的CPU資源的比例
19.%MEM:進程所占用的物理內存百分比
20.VSZ:進程使用掉的虛擬內存的大小,也就是內核虛擬出來的給該進程的線性地址空間的大小,
21.        假如分配給其1000k,或許實際并沒有數據占用,單位為kb
22.RSS:進程占用的固定物理內存的大小,實際占用的內存的大小,常駐內存集,也就是不能交換到swap分區上的數據的大小,單位為kb
23.    一個進程的數據部分分為指令和數據,程序在執行時,內存中的數據也分指令數據和實際的數據,
24.    其中指令數據和部分的實際數據,是不能被交換到交換分區上的,稱之為常駐內存集,而有些數
25.    據是可以被交換到交換分區上的,稱之為虛擬內存集
26.TTY:進程在哪個終端運行
27.STAT:進程目前的狀態
28.    各狀態的值代表的意義
29.        R  運行狀態
30.    S  可中斷睡眠態
31.    D  不可中斷睡眠態
32.    Z  僵死態
33.    T  停止態
34.    有的進程在進程狀態之后還會有其他字母,其分別代表的含義為:
35.    s  seesion leader 會話領導者,主進程
36.    N  低優先級進程
37.    <  高優先級進程
38.    l  多線程進程(小寫的L)
39.    +  前臺進程,占據著某終端
40.START:進程被觸發的時間
41.TIME:進程實際使用cpu的時間
42.COMMAND:觸發此進程的命令

ps -ef顯示出來的結果代表的意義

1.[root@localhost ~]# >>ps -ef
2.UID         PID   PPID  C STIME TTY          TIME CMD
3.root          1      0  0 Sep25 ?        00:00:05 /usr/lib/systemd/systemd --switched-root --system --de
4.root          2      0  0 Sep25 ?        00:00:00 [kthreadd]
5.root          3      2  0 Sep25 ?        00:00:00 [ksoftirqd/0]
6.root          6      2  0 Sep25 ?        00:00:01 [kworker/u256:0]
7.root          7      2  0 Sep25 ?        00:00:00 [migration/0]
8.root          8      2  0 Sep25 ?        00:00:00 [rcu_bh]
9.root          9      2  0 Sep25 ?        00:00:00 [rcuob/0]
10.root         10      2  0 Sep25 ?        00:00:00 [rcuob/1]
11.root         11      2  0 Sep25 ?        00:00:00 [rcuob/2]
12.root         12      2  0 Sep25 ?        00:00:00 [rcuob/3]
13.--------------------------------
14.UID:進程發起者的UID
15.PID:進程號
16.PPID:進程的父進程ID號
17.C:CPU利用率,使用時間
18.STIME:進程的啟動時間,就是指從什么時候啟動的進程
19.TTY:登錄者的終端位置,遠程則顯示pts/N 本地則顯示ttyN,?代表是系統進程
20.TIME:進程實際花費CPU的運行時間,不是系統時間
21.CMD:觸發此進程的命令

pidof命令:根據進程名,取其PID(基于ps aux顯示出來的結果過濾,只顯示指定進程發起命令的PID)

1.[root@localhost ~]# >>pidof bash
2.22697 2722 905
3.[root@localhost ~]# >>ps axo pid,command|grep bash
4.905 /bin/bash /usr/sbin/ksmtuned
5.2722 -bash
6.22697 -bash
7.23280 grep --color=auto bash

2、top命令

top命令: 
語法:top [OPTIONS] 
選項: 
-d 數字 指定刷新時間間隔 
-n 數字 顯示多少次 
-b 以批次顯示top的刷新,要和-n 數字 一起使用,指定要顯示多少批次

進入top命令顯示界面下常用的交互式的子命令: 
M鍵:可以按內存占用百分比大小排序 
P鍵:可以按CPU占用百分比大小排序,默認就是此項 
T鍵:可以按累計占用CPU時長大小排序 
q鍵:退出top交互式界面 
k鍵:可kill某個進程,進入交互式殺死某個PID進程 
s鍵:可指定刷新時間間隔,默認是3秒刷新一次 
W鍵:將結果保存到/root/.toprc文件中 
l鍵:是否顯示第一分欄的負載信息 
t鍵:是否顯示第一分欄的CPU信息 
m鍵:是否顯示定義芬蘭的內存相關信息

top命令顯示出來的內容的各個參數代表的意義

1.[root@localhost ~]# top -n 1    
2.top - 01:44:06 up 10:15,  2 users,  load average: 0.05, 0.04, 0.05
3.Tasks: 144 total,   1 running, 143 sleeping,   0 stopped,   0 zombie
4.Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
5.Mem:   1004136k total,   295800k used,   708336k free,    26872k buffers
6.Swap:  1023996k total,        0k used,  1023996k free,   166232k cached
7.
8.PID USER      PR  NI  VIRT   RES   SHR  S   %CPU   %MEM    TIME+   COMMAND                                                                                      
9.3700 root      20   0 15028  1152   836  R    2.0    0.1   0:00.01  top                                                                                                
10. 1 root      20   0 19352  1548  1228  S    0.0    0.2   0:01.55  init                                                                                
11. 2 root      20   0     0     0     0  S    0.0    0.0   0:00.04  kthreadd                      
12. —————————————————————————————————————————
13.
14.
15.top - 01:44:06 up 10:15,  2 users,  load average: 0.05, 0.04, 0.05
16.分別表示:系統當前時間;持續多長時間;當前有多少個用戶;
17.平均負載1、515分鐘的平均負載,是指cpu上等待運行的隊列長度的負載,一般不會超過1
18.如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。
19.如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題
20.如果linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了
21.不想顯示改行,就按l(小寫的L)鍵
22.
23.利用uptime命令,顯示出來的結果就是該行的結果
24.
25.Tasks:
144 total,   1 running, 143 sleeping,   0 stopped,   0 zombie
26.分別表示:總共的進程數,正在運行進程數,睡眠狀態進程數,停止狀態進程數,僵尸狀態進程數
27.
28.Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
29.分別表示cpu的占用時長百分比:
30.us-用戶空間占用百分比;
31.sy-內核空間占用百分比;
32.ni-調整nice值之后的進程占用的百分比;
33.id-空閑百分比;wa-等待I/O完成的進程占用的百分比(該值大,代表硬盤速度慢);
34.hi-為了處理硬件中斷占用的百分比;
35.si-為了處理軟中斷占用的百分比;
36.st-被偷走的百分比,例如啟動虛擬化后,虛擬化占用的cpu在主機看來就是被偷走的
37.如果有多個CPU,顯示的時候按1可以列出每顆CPU的占用情況,不想顯示CPU相關信息,就按t鍵
38.
39.Mem:
  1004136k total,   295800k used,   708336k free,    26872k buffers
40.分別表示內存占用的相關信息:總內存大小;已用內存大小,空閑內存大小,緩沖大小
41.(往硬盤上寫時,硬盤速度慢,故先放到內存緩沖,再往硬盤上寫;
42.    或許多小數據集中放在內存中,然后集中的往硬盤寫,降低磁盤IO次數)  
43.不想顯示內存和swap的信息可以按m鍵
44.
45.Swap:
 1023996k total,        0k used,  1023996k free,   166232k cached  
46.表示swap交換分區的占用情況:總大小,已用大小,空閑大小,
47.cache緩存大小,實際還是物理內存的cache,放在swap這里顯示而已
48.    (硬盤上的數據往內存里存,方便CPU調用時的讀取速率)
49.
50.PID:進程號
51.USER:進程發起者
52.PR:進程優先級,越小優先級越高
53.NI:進程的nice值,越小優先級越高
54.VIRT:進程需要的虛擬內存大小,而非實際使用的虛擬內存大小
55.RES:進程當前使用的內存大小,不包括swap
56.SHR:進程與其他進程共享的內存大小,可以通過RES-SHR來計算進程所占用的物理內存大小
57.S:進程的狀態
58.%CPUCPU的占用率
59.%MEM:內存的占用率
60.TIME+:CPU使用時間的累加

3、htop命令:top命令的升級版,功能比top強大很多,默認沒安裝,只在epel yum源中有安裝包,支持鼠標操作

進入htop顯示界面后的子命令: 
u 顯示指定用戶的進程 
H 顯示或隱藏用戶的進程 
K 顯示或隱藏系統內核的進程 
M 可以按內存占用百分比大小排序 
P 可以按CPU占用百分比大小排序,默認就是此項 
T 可以按累計占用CPU時長大小排序 
l 顯示進程所打開的文件列表 
s 顯示進程執行的系統調用 
a 綁定進程到指定的CPU上,如果不指定則由內核調度

數字 快速將光標定位至指定的PID進程上 
F1 顯示幫助信息 
F2 進入交互式選定第一分欄中要顯示的字段和字段內容的顯示格式 
F3 搜索指定的內容 
F4 過濾只顯示指定的內容 
F5 以tree方式顯示進程的樹形關系 
F6 指定排序的字段

Linux進程管理命令和性能監控工具的應用

4、kill命令 
進程間通信(IPC): 
同一主機進程間通信的幾種機制: 
1、signal 信號 
2、semaphore 旗語 
3、share memory 共享內存 
不同主機上的進程間通信機制: 
1、跨主機的進程間通信 RPC (遠程過程調用) 
2、socket 基于套接字通信,套接字就是IP和端口的集合

kill命令:能夠實現想起他進程發送信號,可使用的信號類型:(可用kill -l查看 或man 7 signal查看) 
常用的信號有: 
1信號 SIGHUP :通知程序重讀配置文件,而不必重啟程序來實現重讀配置文件 
2信號 SIGINT :中斷信號,Ctrl+c就是發送此信號給進程 
9信號 SIGKILL :殺死進程,直接殺死該進程 
15信號 SIGTERM :終止進程,讓進程釋放資源后殺死該進程

向進程發信號的方法: 
kill -SIGNAL PID kill 不指定發送哪個信號,則默認發送15信號 
SIGNAL可以是: 
數字代號,如1,9,15等 
信號名稱,如SIGHUP等 
簡寫的信號名稱,如HUP等 
如:kill -15 3132 對PID為3132的進程發送15號信號

1.[root@localhost ~]# >>vim mage &
2.[1] 23461
3.[root@localhost ~]# >>ps -aux |  grep vim      
4.root      23461  0.0  0.4 151280  4844 pts/0    T    21:54   0:00 vim mage
5.root      23477  0.0  0.0 112644   952 pts/0    S+   21:54   0:00 grep --color=auto vim
6.[root@localhost ~]# >>kill -9 23461
7.[root@localhost ~]# >>ps -aux |  grep vim
8.root      23479  0.0  0.0 112644   952 pts/0    S+   21:55   0:00 grep --color=auto vim
9.[1]+  Killed                  vim mage

killall -SIGNAL 進程名 
可以一次性對所有進程名為指定名稱的進程發送信號 
如: 
killall -15 vim

1.[root@localhost ~]# >>vim mage1 &
2.[1] 23500
3.[root@localhost ~]# >>vim mage2 &
4.[2] 23501
5.[1]+  Stopped                 vim mage1
6.[root@localhost ~]# >>ps -aux |  grep vim
7.root      23500  0.2  0.4 151280  4840 pts/0    T    21:57   0:00 vim mage1
8.root      23501  0.5  0.4 151280  4848 pts/0    T    21:57   0:00 vim mage2
9.root      23503  0.0  0.0 112644   948 pts/0    S+   21:57   0:00 grep --color=auto vim
10.[2]+  Stopped                 vim mage2
11.[root@localhost ~]# >>killall -9 vim  
12.[root@localhost ~]# >>ps -aux |  grep vim
13.root      23517  0.0  0.0 112644   952 pts/0    S+   21:57   0:00 grep --color=auto vim
14.[1]-  Killed                  vim mage1
15.[2]+  Killed                  vim mage2

第三章 內存監控類工具(vmstat、pmap)

1、vmstat命令

vmstat語法: 
直接運行vmstat 顯示當前的系統相關的使用信息,顯示完成自動退出 
vmstat 數字 表示指定多少秒鐘刷新一次,連續顯示系統相關的信息,不會自動退出 
vmstat 數字1 數字2 表示指定數字1的秒數刷新一次,連續顯示數字2指定的次數后自動退出 
vmstat -s 顯示內存使用的摘要統計信息

vmstat命令顯示內容詳解

1.[root@localhost ~]# >>vmstat 2 5
2.procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
3. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
4. 2  0      0 401192   1200 412540    0    0     2     0   22   35  0  0 100  0  0
5.0  0      0 401176   1200 412572    0    0     0     0   38   58  0  0 100  0  0
6. 0  0      0 401176   1200 412572    0    0     0     0   25   38  0  0 100  0  0
7. 0  0      0 401176   1200 412572    0    0     0     0   38   57  0  0 100  0  0
8. 0  0      0 401052   1200 412572    0    0     0     1   30   42  0  0 100  0  0
9.[root@localhost ~]# >>
10.-----------------------------------------------------
11.procs:進程隊列
12.    r:運行或等待CPU時間片的進程的個數(數值大,說明CPU不夠用,或者跑的進程過多)
13.    b:不可中斷睡眠的進程,被阻塞的進程隊列長度(通常為等待IO完成的應用)
14.
15.memory:內存的相關信息
16.    swpd:從物理內存交換到swap上的數據量大小(有值或者值大,說明物理內存不夠用)
17.    free:未使用的物理內存大小
18.    buff:緩沖空間大小,通常與緩存寫操作相關
19.    cache:緩存空間大小,通常與緩存讀操作相關
20.
21.swap:swap分區的相關信息
22.    si:swap in  從swap交換進內存的數據速率,通常是速率,kb/s
23.    so:swap out  從內存交換至swap的數據速率,通常是速率,kb/s
24.
25.io:跟磁盤IO相關的信息
26.    bi:block in 從塊設備讀入內存的數據量,通常是速率,kb/s
27.    bo:block out  從內存讀出保存到塊設備的數據量,通常是速率,kb/s
28.
29.system:跟系統相關的信息
30.    in:中斷發生速率,也就是每秒鐘產生的中斷次數
31.    cs:context switch  上下文切換,也就是進程切換的速率,也就是每秒鐘切換的次數
32.
33.cpu:跟cpu相關的信息(與top中的cpu的幾個指標類似)
34.    us:用戶空間占用的cpu的百分比
35.    sy:系統內核空間占用的cpu的百分比
36.    id:空閑的cpu百分比
37.    wa:等待IO完成所消耗的cpu百分比
38.    st:被偷走的cpu百分比(虛擬機偷走)

2、pmap命令:顯示指定PID進程所占用的內存地址空間的使用情況

如:pmap 10 顯示PID為10的進程所占用的內存的地址空間的情況 
也可以用過cat /proc/進程號/maps 來查看,pmap實際就是抽取這個文件里面的信息進行顯示的

1.[root@localhost ~]# >>vim mage &
2.[1] 23619
3.[root@localhost ~]# >>pmap 23619
4.23619:   vim mage
5.0000000000400000   2112K r-x-- vim
6.000000000080f000      4K r---- vim
7.0000000000810000     88K rw--- vim
8.0000000000826000     56K rw---   [ anon ]
9.0000000000ae1000   2160K rw---   [ anon ]
10.00007f06bbb58000 103580K r---- locale-archive
11.00007f06c207f000      8K r-x-- libfreebl3.so
12.00007f06c2081000   2044K ----- libfreebl3.so
13.00007f06c2280000      4K r---- libfreebl3.so
14.00007f06c2281000      4K rw--- libfreebl3.so
15.00007f06c2282000      8K r-x-- libutil-2.17.so
16.00007f06c2284000   2044K ----- libutil-2.17.so
17.00007f06c2483000      4K r---- libutil-2.17.so
18.00007f06c2484000      4K rw--- libutil-2.17.so
19.00007f06c2485000     32K r-x-- libcrypt-2.17.so
20.00007f06c248d000   2044K ----- libcrypt-2.17.so

第四章 系統監控類工具(glances、dstat)

1、glances工具,系統上默認沒有安裝,需要通過EPEL源進行安裝,功能強大,支持C/S架構模式進行遠程查看 
內建命令:跟htop類似,可通過h進行查看

命令的常用選項: 
-b 以byte為單位顯示網上數據速率 
-d 關閉磁盤I/O模塊 
-m 關閉mount模塊 
-n 關閉network模塊 
-t 數字 設定刷新時間間隔 
-1 每個cpu的相關數據單獨顯示 
-o 指定將顯示結果輸出到文件中,可支持html格式或csv格式,一般與-f選項一起使用,指定輸出的路徑,如: 
glances -o {HTML|CSV} -f /PATH/TO/SOMEDIR 
只要glances不退出,輸出的文件就會一直更新

Linux進程管理命令和性能監控工具的應用

C/S模式下運行glances命令: 
服務模式: 
glances -s -B IPADDR -B指明本機所監聽的地址 
客戶端模式: 
glances -c IPADDR IPADDR為遠程服務器的地址

2、dstat命令,非常強大的工具,對系統各類資源進行統計,可以實時的監控cpu、磁盤、網絡、IO、內存等使用情況

語法:dstat [-afv] [options..] [delay [count]] 
選項: 
-c:顯示CPU系統占用,用戶占用,空閑,等待,中斷,軟件中斷等信息。 
-C:當有多個CPU時候,此參數可按需分別顯示cpu狀態, 
例:-C 0,1 是顯示cpu0和cpu1的信息。 
-d:顯示磁盤讀寫數據大小。 
-D sda,sdb,…total:顯示指定磁盤的使用情況 
-n:顯示網絡狀態。 
-N eth1,total:有多塊網卡時,指定要顯示的網卡。 
-l:顯示系統負載情況。 
-m:顯示內存使用情況。 
-g:顯示內存頁面使用情況,顯示的是速率數據。 
-p:顯示進程相關統計數據狀態。 
-s:顯示swap交換分區使用情況。 
-S:類似D/N。 
-r:顯示I/O請求相關情況。 
-y:系統狀態。 
–ipc:顯示ipc進程間通信的相關數據,消息隊列,信號,旗語等信息。 
–tcp 顯示tcp相關統計數據 
–udp 顯示udp相關統計數據 
–socket:用來顯示tcp udp端口狀態。 
–top-cpu 顯示最占用CPU的進程 
–top-mem 顯示最占用內存的進程 
–top-io 顯示最占用I/O的進程 
-top-latency 顯示延遲最大的進程 
-a:此為默認選項,等同于-cdngy。 
-v:等同于 -pmgdsc -D total。 
–output 文件:此選項也比較有用,可以把狀態信息以csv的格式重定向到指定的文件中,以便日后查看。 
例:
dstat –output /root/dstat.csv & 此時讓程序默默的在后臺運行并把結果輸出到/root/dstat.csv文件中

Linux進程管理命令和性能監控工具的應用

Linux進程管理命令和性能監控工具的應用

Linux進程管理命令和性能監控工具的應用

Linux進程管理命令和性能監控工具的應用

Linux進程管理命令和性能監控工具的應用

Linux進程管理命令和性能監控工具的應用

Linux進程管理命令和性能監控工具的應用

原創文章,作者:Kartik,如若轉載,請注明出處:http://www.www58058.com/47914

(1)
KartikKartik
上一篇 2016-09-26 18:17
下一篇 2016-09-27 08:48

相關推薦

  • Linux基礎知識(五)-文件查找命令find

    對grep 和 find 命令的操作 1、顯示當前系統上root、fedora或user1用戶的默認shell; 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(); 3、使用echo命令輸出一個路徑,使用grep取出其基名; 4、找出ifconfig命令結果中的1-255之間數字; 5、寫一個…

    Linux干貨 2016-10-24
  • 救援模式安裝grub

    如果之前mbr沒有備份,而后grub損壞進不了系統,只能用系統光盤或U盤開機進入救援模式安裝grub,操作如下 1.光盤啟動,進入救援模式 2.切換根目錄 # chroot /mnt/sysimage 3.安裝 grub # grub-install /dev/sda 4.重新啟動        &…

    Linux干貨 2017-01-13
  • 用戶和組的四大配置文件簡介

    一. 用戶的由來 linux系統擁有的就是資源,最重要的事就是對資源的分配,資源分給誰?在linux上資源的訪問是對用戶賦予不同的權限實現,也就是說能訪問資源的單位是用戶。那用戶在獲取資源之前要實現證明自己是本用戶,這個過程稱為認證,他通過密碼和用戶名實現。在用戶登錄時會將用戶輸入的用戶名和密碼進行校驗,校驗過程就是將輸入的用戶名和密碼與linux系統上記錄…

    Linux干貨 2016-10-24
  • 引導加載程序grub的使用詳解

    引導加載程序grub的使用詳解 為運行于虛擬機上的CentOS 6添加一個新硬件,提供兩個主分區 為硬盤建兩個主分區;并為其安裝grub 為硬盤的第一個主分區提供內核和ramdisk文件;為第二個分區提供rootfs 為rootfs提供bash、ls、cat程序以及所依賴的庫文件 為grub提供配置文件 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機 1.…

    Linux干貨 2017-09-04
  • vim 的使用簡介

    linux day 8 使用vi和vim的三種主要模式 移動光標,進入插入模式 改變、刪除、復制文本 撤銷改變 搜索文檔 vim寄存器 可視化和多窗口 vim幫助 vi: Visual Interface,文本編輯器 文本:ASCII, Unicode 文本編輯種類: 行編輯器: sed 全屏編輯器:nano, vi vim-Vi Improved 其他編輯…

    Linux干貨 2016-08-15
  • 早安,Linux

    希望能通過不斷的努力,變成一個不一樣的我。

    Linux干貨 2017-07-11
欧美性久久久久