概述
監控系統的各方面的性能,保障各類服務的有序運行,是運維工作的重要組成部分,本篇就介紹了一些常用的系統監控命令和相關參數的說明
具體包含一下幾個部分
1.進程管理基礎
2.進程管理工具(ps,top,htop,kill)
3.內存監控類工具(vmstat,pmap)
4.系統監控累工具(glances,dstat)
一,進程管理基礎概念
-
進程
內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
Process:運行中的程序的一個副本,是被載入內存的一個指令集合,因為程序可能會同時被運行
多次,故可以理解為一個副本.進程ID(Process ID,PID)號碼被用來標記各個進程
UID,GID和SELinux語境決定進程對文件系統的存取和訪問權限,通常從執行進程的用戶來繼承
每個進程都存在生命周期:從創建開始,到運行結束就是整個進程的一個生命周期,而程序是個靜態的文件.
task struct(任務結構體):Linux內核存儲進程信息的數據結構格式
task list(任務列表):多個任務的task struct組成的鏈表
-
CPU的工作模式
CPU的工作模式:每臺服務器有很多進程等待CPU來處理,每個進程都必須輪流讓CPU來處理,如果第一個進程一直霸占著CPU不放,就會導致后面的進程一直無法處理,所以就有了優先級最大的內核來調度分配,所以可以總結為
CPU是分時的:一個進程可占用多少CPU的時長,一個CPU在同一時刻只能執行一個任務,CPU自身的寄存器中存放著正在運行的進程的狀態信息,當該進程分配的時間片內沒有完成任務時,也會被內核調度出去,去執行下一個進程,但是之前沒有完成任務的進程數據不會就此丟失,而是會放到內核指定的一個task struct(任務結構體)來存放進程信息,這就稱為保存現場,當再一次輪到這個沒有完成的進程到CPU執行時,內核就會再度調回這個保存現場的數據(這就被稱為恢復現場),來繼續執行,直到完成任務.
保存現場就是當正在運行的進程,CPU運行時間到達之后,將進程運行的狀態等信息,由內核調度存儲到內存中,這就是保存現場
恢復現場就是之前保存過的進程的運行狀態的信息,當該進程又獲得CPU運行時間時,將保存的狀態信息調度到CPU上,這樣CPU就能根據保存的狀態繼續運行進程,而不是從頭開始運行進程
存儲的進程的任務結構體很多,所以就有了task list(任務列表),而進程ID就是來排序這個任務列表
-
內存的工作模式
內存的工作模式也是分空間的:一個進程可占用多少內存空間,內存分配方式有點類似磁盤,分成很多塊,但內存不叫塊,而是叫頁框(page frame)用于存儲頁面數據,一般一個page的大小為4K。分配的頁框可以有多個,且可以不連續。
進程需要用到內存數據的時候,怎么去找內存中不連續的數據?
因為數據在實際內存中可以不連續,也就是離散的,故一般情況下,內核會虛擬一個內存空間面向進程,進程不需要直接與實際的物理存儲的內存打交道,只需與內核虛擬出來的內存打交道,內核虛擬出來的內存的大小,與計算機平臺的位數有關系,一般32位系統上,單個進程虛擬出來的內存大小為4G,1G給內核使用,3G給該進程使用;64位系統上,單個進程虛擬出來的內存大小為4G,內核虛擬出來的內存空間叫做線性地址空間,內核虛擬出來的內存對進程而言是連續,且獨占的。這樣,進程讀寫內存數據時就認為自己讀取的是一個連續的地址空間,且是獨占的,這段虛擬出來的空間中,只有真正被使用的部分,內核才會在物理內存上分配空間進行存儲swap分區:為了防止過多的進程將實際物理內存占滿導致程序無法運行,從而有了swap交換分區的概念,swap分區實際是用來臨時存放內存中暫時用不到的頁面數據。置換時,通常采用LRU算法(最近最少使用)將最近最少用到的數據暫存在交換分區中
不能交換的進程稱為常駐進程集,能夠被交換的進程稱為虛擬進程集
一次磁盤IO分為兩段進行,第一段是將數據從磁盤拿到內存中內核空間,第二段時將內核空間的數據復制一份放到用戶空間
LRU:Least Recently Used 近期最少使用算法,釋放內存物理地址空間和線性地址空間
MMU:Memory Management Unit負責轉換線性和物理地址
-
Linux上進程創建模型
進程創建
在系統啟動成功之后內核就會創建第一個進程,它就是父進程,后續的進程都由其創建
init進程:初始化進程,后續的所有用戶空間進程管理者(所有進程的父進程)其他進程:除了init進程之外,所有進程都由父進程創建,父進程利用fork()系統調用生成,每個進程都是由父進程fork()自身而來,會clone()自身的數據給子進程
當父進程創建子進程時,子進程和父進程使用的是同一段內存空間;一旦子進程需要對該段內存空間的數據進行修改時,就會復制該段內存空間的數據到另外一段內存空間,子進程就指向了該段新的內存空間
這種機制叫CoW(寫時復制),如果子進程不對數據進程修改,跟父進程使用的內存空間都是同一個,但是一旦子進程要修改數據,就復制一份數據到另一塊內存供子進程單獨使用,而從此之后,子進程就一直使用新的內存空間了
進程的終止:子進程完成一定的任務之后,釋放掉自己占用的資源,然后父進程對子進程進行回收
-
進程的優先級
基于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 代表 規模大小,這也表明了,時間復雜度 跟 規模的關系。
最好時間復雜度,通常指在最好情形下,這個算法用時。反之,最壞情況下的就是最壞時間復雜度。
-
進程隊列
Linux內核為了能夠快速的實現這些優先級不同的進程的調度,將待運行的進程按照對應的優先級分成了140個運行隊列,每個優先級相同的進程為同一個隊列,這樣,內核進行調度時,不需要遍歷整個隊列,而是按照優先級從高到低,取隊列的第一個進程進行調度
同時也有140個過期隊列,就是將上面運行隊列中,調度過的進程,在為其分配的CPU時間片的時間內尚未運行完成,就放到了過期隊列,當同優先級的運行隊列中的進程都被調度完成后,就會重新調度過期隊列,此時過期隊列就變成了運行隊列
-
進程間通信機制(IPC: Inter Process Communication)
同一主機上:
signal:可以通過發送信號(通過kill命令)
shm(shared memory):共享內存
semerphor:信號量,一種計數器
不同主機上:
rpc(remote procedure call):遠程過程調用
socket:rpc也是基于socket調用,套接字通信機制.IP和端口號
-
linux內核:搶占式多任務
進程類型
守護進程:daemon,跟終端無關,由內核在系統引導過程中啟動的進程
用戶前臺進程:用戶通過終端啟動的進程,跟終端相關
注意:也可把前臺啟動的進程收網后臺,以守護模式運行進程的狀態
運行態:running,進程正在運行中
就緒態:ready,可以運行但尚未被運行
睡眠態:sleeping
可中斷睡眠:interruptible,調度到CPU上可立即運行起來
不可中斷睡眠:uninterruptible 通常是指被IO阻塞的進程,等待IO滿足之前無法繼續運行
僵死態:zombie,找不到歸屬,父進程沒有回收該進程,父進程就掛了
停止態:stopped 暫停于內存中,不可被調度并運行一次磁盤IO分為兩段進行,第一段是將數據從磁盤拿到內存中內核空間,第二段時將內核空間的數據復制一份放到用戶空間
-
線程相關概念
線程:是一個進程內部的多個執行流,一個執行流就叫一個線程
一個進程只有一個執行流,也可以有線程,這種模式就叫單進程單線程模型
一個進程有多個執行流,就叫單進程多線程模型
如果一個進程有多個執行流,也就是有多個線程,但是如果只有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、5、15分鐘的平均負載,是指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.%CPU:CPU的占用率
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 指定排序的字段
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不退出,輸出的文件就會一直更新
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文件中
原創文章,作者:Kartik,如若轉載,請注明出處:http://www.www58058.com/47914