1、100.0.0.16/28 對應(yīng)網(wǎng)段的網(wǎng)關(guān)地址、廣播地址、可分配IP地址范圍
根據(jù)IP地址100.0.0.16判斷該IP為一個A類IP地址。
根據(jù)子網(wǎng)掩碼28,得到主機(jī)位是4位,掩碼為255.255.255.240
因此主機(jī)數(shù)量為2^4-2= 14臺主機(jī)
以第四段為例計(jì)算,
其中子網(wǎng)個數(shù)為2^4=16個,其中4表示借用第四段4個主機(jī)位
其中合法子網(wǎng)為:0 16 32 48 64 ...240總共16個
而IP地址100.0.0.16 在子網(wǎng)16中,
該子網(wǎng)的網(wǎng)絡(luò)地址為:100.0.0.16
廣播地址:100.0.0.31
可分配IP地址范圍是100.0.0.17-100.0.0.30這14個IP地址。
網(wǎng)關(guān)地址為可分配IP地址范圍中的任意一個IP地址。
2、使用man手冊學(xué)習(xí)tcpdump的使用
tcpdump 是一個運(yùn)行在命令行下的抓包工具。它允許用戶攔截和顯示發(fā)送或收到過網(wǎng)絡(luò)連接到該計(jì)算機(jī)的TCP/IP和其他數(shù)據(jù)包。tcpdump 適用于大多數(shù)的類Unix系統(tǒng)操作系統(tǒng)(如linux,BSD等)。
- tcpdump采用命令行方式,它的命令格式為:
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ] - 命令選項(xiàng)說明
-a #將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成名字
-A #以ASCII格式打印出所有分組,并將鏈路層的頭最小化
-b #數(shù)據(jù)鏈路層上選擇協(xié)議,包括ip/arp/rarp/ipx都在這一層
-c #指定收取數(shù)據(jù)包的次數(shù),即在收到指定數(shù)量的數(shù)據(jù)包后退出tcpdump
-d #將匹配信息包的代碼以人們能夠理解的匯編格式輸出
-dd #將匹配信息包的代碼以c語言程序段的格式輸出
-ddd #將匹配信息包的代碼以十進(jìn)制的形式輸出
-D #打印系統(tǒng)中所有可以監(jiān)控的網(wǎng)絡(luò)接口
-e #在輸出行打印出數(shù)據(jù)鏈路層的頭部信息
-f #將外部的Internet地址以數(shù)字的形式打印出來,即不顯示主機(jī)名
-F #從指定的文件中讀取表達(dá)式,忽略其他的表達(dá)式
-i #指定監(jiān)聽網(wǎng)絡(luò)接口
-l #使標(biāo)準(zhǔn)輸出變?yōu)榫彌_形式,可以數(shù)據(jù)導(dǎo)出到文件
-L #列出網(wǎng)絡(luò)接口已知的數(shù)據(jù)鏈路
-n #不把網(wǎng)絡(luò)地址轉(zhuǎn)換為名字
-N 不輸出主機(jī)名中的域名部分,例如www.baidu.com只輸出www
-nn #不進(jìn)行端口名稱的轉(zhuǎn)換
-P #不將網(wǎng)絡(luò)接口設(shè)置為混雜模式
-q #快速輸出,即只輸出較少的協(xié)議信息
-r #從指定的文件中讀取數(shù)據(jù),一般是-w保存的文件
-w #將捕獲到的信息保存到文件中,且不分析和打印在屏幕
-s #從每個組中讀取在開始的snaplen個字節(jié),而不是默認(rèn)的68個字節(jié)
-S #將tcp的序列號以絕對值形式輸出,而不是相對值
-T #將監(jiān)聽到的包直接解析為指定的類型的報(bào)文,常見的類型有rpc(遠(yuǎn)程過程調(diào)用)和snmp(簡單網(wǎng)絡(luò)管理協(xié)議)
-t #在輸出的每一行不打印時(shí)間戳
-tt #在每一行中輸出非格式化的時(shí)間戳
-ttt #輸出本行和前面以后之間的時(shí)間差
-tttt #在每一行中輸出data處理的默認(rèn)格式的時(shí)間戳
-u #輸出未解碼的NFS句柄
-v #輸出稍微詳細(xì)的信息,例如在ip包中可以包括ttl和服務(wù)類型的信息
-vv#輸出相信的報(bào)文信息 - tcpdump的表達(dá)式:
表達(dá)式是一個正則表達(dá)式,tcpdump利用它作為過濾報(bào)文的條件,如果一個報(bào)文滿足表達(dá)式的條件,則這個報(bào)文將會被捕獲。如果沒有給出任何條件,則網(wǎng)絡(luò)上所有的信息包 將會被截獲,在表達(dá)式中一般如下幾種類型的關(guān)鍵字:- 關(guān)于數(shù)據(jù)類型的關(guān)鍵字:
包括host、port、net,例如host 192.168.1.1表示這是一臺主機(jī),net 192.168.0.0表示這是一個網(wǎng)絡(luò)地址,port 22指明端口號是22,如果沒有指明類型,則默認(rèn)的類型是host。 - 數(shù)據(jù)傳輸方向的關(guān)鍵字:
包括src、dst、dst or src、dst and src,這些關(guān)鍵字指明了傳輸?shù)姆较颍热鐂rc 192.168.1.1說明數(shù)據(jù)包源地址是192.168.1.1,dst net 192.168.0.0指明目的網(wǎng)絡(luò)地址是192.168.0.0,默認(rèn)是監(jiān)控主機(jī)對主機(jī)的src和dst,即默認(rèn)監(jiān)聽本機(jī)和目標(biāo)主機(jī)的所有數(shù)據(jù)。 - 協(xié)議關(guān)鍵字:
包括ip、arp、rarp、tcp、udp等, - 其他關(guān)鍵字:
運(yùn)算類型的:or、and、not、!
輔助功能型的:gateway、less、broadcast、greater
- 關(guān)于數(shù)據(jù)類型的關(guān)鍵字:
- tcpdump常用示例
下面所有測試中都有 -i any的選項(xiàng),表示抓取所有網(wǎng)絡(luò)接口上的包,只是為了讓測試方便
//抓取arp協(xié)議的包,然后host為10.192.2.* 測試時(shí)需要在另一個session,做一個ifconfig指令
//arp可以換為tcp,udp等
[root@node01 ~]#tcpdump -i any -n arp host 10.192.2.222
15:36:51.821905 ARP, Request who-has 10.192.2.1 tell 10.192.2.222, length 28
15:36:51.822449 ARP, Reply 10.192.2.1 is-at 38:97:d6:f8:bd:33, length 46
//抓取訪問destination 80端口的包,然后我們做一個curl www.baidu.com的操作
[root@node01 ~]# tcpdump -i any -n dst port 80
15:39:01.369435 IP 10.192.2.222.47686 > 14.215.177.38.http: Flags [S], seq 819318323, win 29200, options [mss 1460,sackOK,TS val 2850464827 ecr 0,nop,wscale 7], length 0
15:39:01.376363 IP 10.192.2.222.47686 > 14.215.177.38.http: Flags [.], ack 1490870282, win 229, length 0
15:39:01.376479 IP 10.192.2.222.47686 > 14.215.177.38.http: Flags [P.], seq 0:77, ack 1, win 229, length 77: HTTP: GET / HTTP/1.1
15:39:01.386582 IP 10.192.2.222.47686 > 14.215.177.38.http: Flags [.], ack 1849, win 257, length 0
15:39:01.386637 IP 10.192.2.222.47686 > 14.215.177.38.http: Flags [.], ack 2782, win 277, length 0
15:39:01.386884 IP 10.192.2.222.47686 > 14.215.177.38.http: Flags [F.], seq 77, ack 2782, win 277, length 0
15:39:01.393760 IP 10.192.2.222.47686 > 14.215.177.38.http: Flags [.], ack 2783, win 277, length 0
//抓取源上端口是22的包
[root@node01 ~]# tcpdump -i any -n src port 22
15:42:01.250919 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 2151794643:2151794839, ack 2324872893, win 291, length 196
15:42:01.251262 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 196:376, ack 1, win 291, length 180
15:42:01.251447 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 376:540, ack 1, win 291, length 164
//抓取源或者目標(biāo)端口都是22的包
[root@node01 ~]# tcpdump -i any -n port 22 -c
15:42:55.031581 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 2151796671:2151796867, ack 2324874073, win 291, length 196
15:42:55.031937 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 196:376, ack 1, win 291, length 180
15:42:55.032124 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 376:540, ack 1, win 291, length 164
//表示抓取destination prot 在1到80之間的端口的數(shù)據(jù),在另外的面做curl www.baidu.com
[root@node01 ~]# tcpdump -i any -n dst portrange 1-80
15:44:45.205605 IP 10.192.52.63.54158 > 10.192.2.222.ssh: Flags [P.], seq 0:52, ack 1629, win 253, length 52
15:44:45.216919 IP 10.192.2.222.59407 > 114.114.114.114.domain: 63614+ A? www.baidu.com. (31)
15:44:45.216943 IP 10.192.2.222.59407 > 114.114.114.114.domain: 39132+ AAAA? www.baidu.com. (31)
15:44:45.218231 IP 10.192.52.63.54158 > 10.192.2.222.ssh: Flags [.], ack 2073, win 252, length 0
15:44:45.244046 IP 10.192.2.222.47688 > 14.215.177.38.http: Flags [S], seq 36781375, win 29200, options [mss 1460,sackOK,TS val 2850808702 ecr 0,nop,wscale 7], length 0
15:44:45.245393 IP 10.192.52.63.54158 > 10.192.2.222.ssh: Flags [.], ack 2433, win 256, length 0
15:44:45.249647 IP 10.192.2.222.47688 > 14.215.177.38.http: Flags [.], ack 4195151903, win 229, length 0
15:44:45.249916 IP 10.192.2.222.47688 > 14.215.177.38.http: Flags [P.], seq 0:77, ack 1, win 229, length 77: HTTP: GET / HTTP/1.1
15:44:45.250800 IP 10.192.52.63.54158 > 10.192.2.222.ssh: Flags [.], ack 2729, win 255, length 0
15:44:45.252378 IP 10.192.52.63.54158 > 10.192.2.222.ssh: Flags [.], ack 3057, win 254, length 0
15:44:45.256963 IP 10.192.2.222.47688 > 14.215.177.38.http: Flags [.], ack 1449, win 251, length 0
15:44:45.257038 IP 10.192.2.222.47688 > 14.215.177.38.http: Flags [.], ack 2782, win 272, length 0
15:44:45.257363 IP 10.192.2.222.47688 > 14.215.177.38.http: Flags [F.], seq 77, ack 2782, win 272, length 0
//抓取源的端口是20-80的包
[root@node01 ~]# tcpdump -i any -n src portrange 20-80
15:48:25.510628 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 2152992151:2152992347, ack 2324881429, win 291, length 196
15:48:25.510960 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 196:376, ack 1, win 291, length 180
15:48:25.511157 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 376:540, ack 1, win 291, length 164
//抓取destination為www.baidu.com的包
[root@node01 ~]# tcpdump -i any dst www.baidu.com
15:50:06.569979 IP node01 > 14.215.177.39: ICMP echo request, id 5139, seq 16, length 64
15:50:07.571298 IP node01 > 14.215.177.39: ICMP echo request, id 5139, seq 17, length 64
//抓取destination為10.192.2.161的包
[root@node01 ~]# tcpdump -i any dst 10.192.2.161
15:52:02.265951 ARP, Request who-has 10.192.2.161 tell gateway, length 46
15:53:02.311727 ARP, Request who-has 10.192.2.161 tell gateway, length 46
//抓取包長度小于800的包
[root@node01 ~]# tcpdump -i any -n less 800
15:56:02.297070 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 196:376, ack 1, win 291, length 180
15:56:02.297252 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 376:540, ack 1, win 291, length 164
//抓取包長度大于800的包
[root@node01 ~]# tcpdump -i any -n greater 800
5:57:52.926274 IP 14.215.177.38.http > 10.192.2.222.47690: Flags [P.], seq 727058018:727059866, ack 3414192055, win 776, length 1848: HTTP: HTTP/1.1 200 OK
15:57:52.926352 IP 14.215.177.38.http > 10.192.2.222.47690: Flags [P.], seq 1848:2781, ack 1, win 776, length 933: HTTP
15:57:52.928952 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 2153586163:2153588631, ack 2324893229, win 291, length 2468
//只抓取tcp包
[root@node01 ~]# tcpdump -i any -n tcp
15:58:59.096035 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 196:376, ack 1, win 291, length 180
15:58:59.096253 IP 10.192.2.222.ssh > 10.192.52.63.54158: Flags [P.], seq 376:540, ack 1, win 291, length 164
//只抓取udp包
[root@node01 ~]# tcpdump -i any -n udp
15:59:54.956283 IP 10.192.2.126.netbios-dgm > 10.192.2.255.netbios-dgm: NBT UDP PACKET(138)
//只抓取icmp的包,ping命令
[root@node01 ~]# tcpdump -i any -n icmp
16:00:40.899281 IP 10.192.2.222 > 14.215.177.38: ICMP echo request, id 5160, seq 1, length 64
16:00:40.905691 IP 14.215.177.38 > 10.192.2.222: ICMP echo reply, id 5160, seq 1, length 64
16:00:41.900451 IP 10.192.2.222 > 14.215.177.38: ICMP echo request, id 5160, seq 2, length 64
3、詳細(xì)敘述僵尸進(jìn)程產(chǎn)生的原因以及危害
- 僵尸進(jìn)程簡介
在linux系統(tǒng)中,當(dāng)用ps命令觀察進(jìn)程的執(zhí)行狀態(tài)時(shí),經(jīng)??吹侥承┻M(jìn)程的狀態(tài)欄為defunct,這就是所謂的“僵尸”進(jìn)程?!敖┦边M(jìn)程是一個早已死亡的進(jìn)程,但在進(jìn)程表(processs table)中仍占了一個位置(slot)。由于進(jìn)程表的容量是有限的,所以,defunct進(jìn)程不僅占用系統(tǒng)的內(nèi)存資源,影響系統(tǒng)的性能,而且如果其數(shù)目太多,還會導(dǎo)致系統(tǒng)癱瘓。 - 僵尸進(jìn)程的產(chǎn)生原因
我們知道,每個進(jìn)程在進(jìn)程表里都有一個進(jìn)入點(diǎn)(entry),核心程序執(zhí)行該進(jìn)程時(shí)使用到的一切信息都存儲在進(jìn)入點(diǎn)。當(dāng)用ps命令察看系統(tǒng)中的進(jìn)程信息時(shí),看到的就是進(jìn)程表中的相關(guān)數(shù)據(jù)。所以,當(dāng)一個父進(jìn)程以fork()系統(tǒng)調(diào)用建立一個新的子進(jìn)程后,核心進(jìn)程就會在進(jìn)程表中給這個子進(jìn)程分配一個進(jìn)入點(diǎn),然后將相關(guān)信息存儲在該進(jìn)入點(diǎn)所對應(yīng)的進(jìn)程表內(nèi)。這些信息中有一項(xiàng)是其父進(jìn)程的識別碼。而當(dāng)這個子進(jìn)程結(jié)束的時(shí)候(比如調(diào)用exit命令結(jié)束),其實(shí)他并沒有真正的被銷毀,而是留下一個稱為僵尸進(jìn)程(Zombie)的數(shù)據(jù)結(jié)構(gòu)(系統(tǒng)調(diào)用exit的作用是使進(jìn)程退出,但是也僅僅限于一個正常的進(jìn)程變成了一個僵尸進(jìn)程,并不能完全將其銷毀)。此時(shí)原來進(jìn)程表中的數(shù)據(jù)會被該進(jìn)程的退出碼(exit code)、執(zhí)行時(shí)所用的CPU時(shí)間等數(shù)據(jù)所取代,這些數(shù)據(jù)會一直保留到系統(tǒng)將它傳遞給它的父進(jìn)程為止。由此可見,defunct進(jìn)程的出現(xiàn)時(shí)間是在子進(jìn)程終止后,但是父進(jìn)程尚未讀取這些數(shù)據(jù)之前。此時(shí),該僵尸子進(jìn)程已經(jīng)放棄了幾乎所有的內(nèi)存空間,沒有任何可執(zhí)行代碼,也不能被調(diào)度,僅僅在進(jìn)程列表中保留一個位置,記載該進(jìn)程的退出狀態(tài)信息供其他進(jìn)程收集,除此之外,僵尸進(jìn)程不再占有任何存儲空間。他需要他的父進(jìn)程來為他收尸,如果他的父進(jìn)程沒有安裝SIGCHLD信號處理函數(shù)調(diào)用wait 或 waitpid() 等待子進(jìn)程結(jié)束,也沒有顯式忽略該信號,那么它就一直保持僵尸狀態(tài),如果這時(shí)候父進(jìn)程結(jié)束了,那么init進(jìn)程會自動接手這個子進(jìn)程,為他收尸,他還是能被清除掉的。但是如果父進(jìn)程是一個循環(huán),不會結(jié)束,那么子進(jìn)程就會一直保持僵尸狀態(tài),這就是系統(tǒng)中為什么有時(shí)候會有很多的僵尸進(jìn)程。 - 如何殺死僵尸進(jìn)程
- 重啟服務(wù)器電腦,這個是最簡單,最易用的方法,但是如果你服務(wù)器電腦上運(yùn)行有其他的程序,那么這個方法,代價(jià)很大。
- 找到該defunct僵尸進(jìn)程的父進(jìn)程,將該進(jìn)程的父進(jìn)程殺掉,則此defunct進(jìn)程將自動消失
命令: ps -ef | grep defunct_process_pid
- 如何預(yù)防僵尸進(jìn)程
- 在父進(jìn)程創(chuàng)建子進(jìn)程之前,就向系統(tǒng)申明自己并不會對這個子進(jìn)程的exit動作進(jìn)行任何關(guān)注行為,這樣的話,子進(jìn)程一旦退出后,系統(tǒng)就不會去等待父進(jìn)程的操作,而是直接將該子進(jìn)程的資源回收掉,也就不會出現(xiàn)僵尸進(jìn)程了。具體的辦法就是,在父進(jìn)程的初始化函數(shù)中,調(diào)用這個函數(shù):signal(SIGCHLD,SIG_IGN);
- 如果上述語句沒來得及調(diào)用,也有另外一個辦法。那就是在創(chuàng)建完子進(jìn)程后,用waitpid等待子進(jìn)程返回,也能達(dá)到上述效果;
- 如果上述兩個辦法都不愿意采用,那還有一招:在父進(jìn)程創(chuàng)建子進(jìn)程的時(shí)候,連續(xù)調(diào)用兩次fork(),而且使緊跟的子進(jìn)程直接退出,使其孫子進(jìn)程成為孤兒進(jìn)程,從而init進(jìn)程將代替父進(jìn)程來接手,負(fù)責(zé)清除這個孤兒進(jìn)程。于是,父進(jìn)程就無需進(jìn)行任何的清理行為,系統(tǒng)會自動處理;
4、詳細(xì)說明vmstat輸出結(jié)果的含義
vmstat命令: 用來獲得有關(guān)進(jìn)程、虛存、頁面交換空間及 CPU活動的信息。這些信息反映了系統(tǒng)的負(fù)載情況。
- 虛擬內(nèi)存運(yùn)行原理
在系統(tǒng)中運(yùn)行的每個進(jìn)程都需要使用到內(nèi)存,但不是每個進(jìn)程都需要每時(shí)每刻使用系統(tǒng)分配的內(nèi)存空間。當(dāng)系統(tǒng)運(yùn)行所需內(nèi)存超過實(shí)際的物理內(nèi)存,內(nèi)核會釋放某些進(jìn)程所占用但未使用的部分或所有物理內(nèi)存,將這部分資料存儲在磁盤上直到進(jìn)程下一次調(diào)用,并將釋放出的內(nèi)存提供給有需要的進(jìn)程使用。在Linux內(nèi)存管理中,主要是通過“調(diào)頁P(yáng)aging”和“交換Swapping”來完成上述的內(nèi)存調(diào)度。調(diào)頁算法是將內(nèi)存中最近不常使用的頁面換到磁盤上,把活動頁面保留在內(nèi)存中供進(jìn)程使用。交換技術(shù)是將整個進(jìn)程,而不是部分頁面,全部交換到磁盤上。分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In。當(dāng)內(nèi)核需要一個分頁時(shí),但發(fā)現(xiàn)此分頁不在物理內(nèi)存中(因?yàn)橐呀?jīng)被Page-Out了),此時(shí)就發(fā)生了分頁錯誤(Page Fault)。當(dāng)系統(tǒng)內(nèi)核發(fā)現(xiàn)可運(yùn)行內(nèi)存變少時(shí),就會通過Page-Out來釋放一部分物理內(nèi)存。經(jīng)管Page-Out不是經(jīng)常發(fā)生,但是如果Page-out頻繁不斷的發(fā)生,直到當(dāng)內(nèi)核管理分頁的時(shí)間超過運(yùn)行程式的時(shí)間時(shí),系統(tǒng)效能會急劇下降。這時(shí)的系統(tǒng)已經(jīng)運(yùn)行非常慢或進(jìn)入暫停狀態(tài),這種狀態(tài)亦被稱作thrashing(顛簸)。 - vmstat常用用法組合
vmstat [options] [delay [count]]
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V] - 選項(xiàng)說明
-a:顯示活躍和非活躍內(nèi)存
-f:顯示從系統(tǒng)啟動至今的fork數(shù)量 。
-m:顯示slabinfo
-n:只在開始時(shí)顯示一次各字段名稱。
-s:顯示內(nèi)存相關(guān)統(tǒng)計(jì)信息及多種系統(tǒng)活動數(shù)量。
delay:刷新時(shí)間間隔。如果不指定,只顯示一條結(jié)果。
count:刷新次數(shù)。如果不指定刷新次數(shù),但指定了刷新時(shí)間間隔,這時(shí)刷新次數(shù)為無窮。
-d:顯示磁盤相關(guān)統(tǒng)計(jì)信息。
-p:顯示指定磁盤分區(qū)統(tǒng)計(jì)信息
-S:使用指定單位顯示。參數(shù)有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(jié)(byte)。默認(rèn)單位為K(1024 bytes)
-V:顯示vmstat版本信息。 - 根據(jù)示例進(jìn)行字段說明
[root@node01 ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1135388 6332 2578060 0 0 0 1 4 5 0 0 100 0 0
0 0 0 1135372 6332 2578060 0 0 0 0 98 81 0 0 100 0 0
0 0 0 1135372 6332 2578060 0 0 0 0 86 72 0 0 100 0 0
0 0 0 1135372 6332 2578060 0 0 0 0 92 74 0 0 100 0 0
0 0 0 1135372 6332 2578060 0 0 0 0 83 72 0 0 100 0 0
- procs
r等待執(zhí)行的任務(wù)數(shù) 說明:展示了正在執(zhí)行和等待cpu資源的任務(wù)個數(shù)。當(dāng)這個值超過了cpu個數(shù),就會出現(xiàn)cpu瓶頸
b等待IO的進(jìn)程數(shù)量 - memory
swpd正在使用虛擬的內(nèi)存大小,單位k
free空閑內(nèi)存大小
buff已用的buff大小,對塊設(shè)備的讀寫進(jìn)行緩沖
cache已用的cache大小,文件系統(tǒng)的cache
inact非活躍內(nèi)存大小,即被標(biāo)明可回收的內(nèi)存,區(qū)別于free和active
active活躍的內(nèi)存大小 - swap
si每秒從交換區(qū)寫入內(nèi)存的大?。▎挝唬簁b/s)
so每秒從內(nèi)存寫到交換區(qū)的大小 - io
bi每秒讀取的塊數(shù)(讀磁盤)
bo每秒寫入的塊數(shù)(寫磁盤) - system
in每秒中斷數(shù),包括時(shí)鐘中斷
cs每秒上下文切換數(shù) - cpu
us用戶進(jìn)程執(zhí)行消耗cpu時(shí)間(user time)
sy系統(tǒng)進(jìn)程消耗cpu時(shí)間(system time)
id空閑時(shí)間(包括IO等待時(shí)間)
wa等待IO時(shí)間
st從虛擬機(jī)竊取的時(shí)間 - 常見問題處理
如果r經(jīng)常大于4,且id經(jīng)常少于40,表示cpu的負(fù)荷很重。
如果si,so長期不等于0,表示內(nèi)存不足。
如果wa經(jīng)常不等于0,且在b中的隊(duì)列大于3,表示io性能不好。
如果在processes中運(yùn)行的序列(process r)是連續(xù)的大于在系統(tǒng)中的CPU的個數(shù)表示系統(tǒng)現(xiàn)在運(yùn)行比較慢,有多數(shù)的進(jìn)程等待CPU。
如果r的輸出數(shù)大于系統(tǒng)中可用CPU個數(shù)的4倍的話,則系統(tǒng)面臨著CPU短缺的問題,或者是CPU的速率過低,系統(tǒng)中有多數(shù)的進(jìn)程在等待CPU,造成系統(tǒng)中進(jìn)程運(yùn)行過慢。
如果空閑時(shí)間(cpu id)持續(xù)為0并且系統(tǒng)時(shí)間(cpu sy)是用戶時(shí)間的兩倍(cpu us)系統(tǒng)則面臨著CPU資源的短缺。
解決辦法:
當(dāng)發(fā)生以上問題的時(shí)候請先調(diào)整應(yīng)用程序?qū)PU的占用情況.使得應(yīng)用程序能夠更有效的使用CPU.同時(shí)可以考慮增加更多的CPU. 關(guān)于CPU的使用情況還可以結(jié)合mpstat, ps aux top prstat –a等等一些相應(yīng)的命令來綜合考慮關(guān)于具體的CPU的使用情況,和那些進(jìn)程在占用大量的CPU時(shí)間.一般情況下,應(yīng)用程序的問題會比較大一些.比如一些sql語句不合理等等都會造成這樣的現(xiàn)象.內(nèi)存問題現(xiàn)象:
內(nèi)存的瓶頸是由scan rate (sr)來決定的.scan rate是通過每秒的始終算法來進(jìn)行頁掃描的.如果scan rate(sr)連續(xù)的大于每秒200頁則表示可能存在內(nèi)存缺陷.同樣的如果page項(xiàng)中的pi和po這兩欄表示每秒頁面的調(diào)入的頁數(shù)和每秒調(diào)出的頁數(shù).如果該值經(jīng)常為非零值,也有可能存在內(nèi)存的瓶頸,當(dāng)然,如果個別的時(shí)候不為0的話,屬于正常的頁面調(diào)度這個是虛擬內(nèi)存的主要原理.
解決辦法:
1.調(diào)節(jié)applications & servers使得對內(nèi)存和cache的使用更加有效.
2.增加系統(tǒng)的內(nèi)存.
關(guān)于內(nèi)存的使用情況還可以結(jié)ps aux top prstat –a等等一些相應(yīng)的命令來綜合考慮關(guān)于具體的內(nèi)存的使用情況,和那些進(jìn)程在占用大量的內(nèi)存.一般情況下,如果內(nèi)存的占用率比較高,但是,CPU的占用很低的時(shí)候,可以考慮是有很多的應(yīng)用程序占用了內(nèi)存沒有釋放,但是,并沒有占用CPU時(shí)間,可以考慮應(yīng)用程序,對于未占用CPU時(shí)間和一些后臺的程序,釋放內(nèi)存的占用。