日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux下性能监控工具

發(fā)布時(shí)間:2025/7/14 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下性能监控工具 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.??Linux?性能監(jiān)控的概述

???????系統(tǒng)由若干子系統(tǒng)構(gòu)成,通常改動(dòng)一個(gè)子系統(tǒng)有可能影響到另外一個(gè)子系統(tǒng)。甚至?xí)?dǎo)致整個(gè)系統(tǒng)不穩(wěn)定、崩潰。

所以說(shuō)優(yōu)化、監(jiān)測(cè)、測(cè)試一般是連在一起的,并且是一個(gè)循環(huán)并且長(zhǎng)期的過(guò)程,通常監(jiān)測(cè)的子系統(tǒng)有下面這些:

(1).??????CPU

(2).??????Memory

(3).??????IO

(4).??????Network

???????這些子系統(tǒng)互相依賴,了解這些子系統(tǒng)的特性,監(jiān)測(cè)這些子系統(tǒng)的性能參數(shù)以及及時(shí)發(fā)現(xiàn)可能會(huì)出現(xiàn)的瓶頸對(duì)系統(tǒng)優(yōu)化非常有幫助。

1.1??應(yīng)用類(lèi)型

???????不同的系統(tǒng)用途也不同。要找到性能瓶頸須要知道系統(tǒng)跑的是什么應(yīng)用、有些什么特點(diǎn)。比方?web server?對(duì)系統(tǒng)的要求肯定和?file server?不一樣,所以分清不同系統(tǒng)的應(yīng)用類(lèi)型非常重要,通常應(yīng)用能夠分為兩種類(lèi)型:

???????(1)IO?相關(guān)。IO?相關(guān)的應(yīng)用通經(jīng)常使用來(lái)處理大量數(shù)據(jù),須要大量?jī)?nèi)存和存儲(chǔ),頻繁?IO?操作讀寫(xiě)數(shù)據(jù),而對(duì)?CPU?的要求則較少,大部分時(shí)候?CPU?都在等待硬盤(pán)。比方,數(shù)據(jù)庫(kù)server、文件server等。

???????(2)CPU?相關(guān)。CPU?相關(guān)的應(yīng)用須要使用大量?CPU,比方高并發(fā)的?web/mail?server、圖像/視頻處理、科學(xué)計(jì)算等都可被視作?CPU?相關(guān)的應(yīng)用。

看看實(shí)際中的樣例。第1個(gè)是文件server拷貝一個(gè)大文件時(shí)表現(xiàn)出來(lái)的特征:

$ 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 0? 4??? 140 1962724 335516 4852308? 0??? 0?? 388 65024 1442? 563? 0? 2 47 52? 0 0? 4??? 140 1961816 335516 4853868? 0??? 0?? 768 65536 1434? 522? 0? 1 50 48? 0 0? 4??? 140 1960788 335516 4855300? 0??? 0?? 768 48640 1412? 573? 0? 1 50 49? 0 0? 4??? 140 1958528 335516 4857280? 0??? 0? 1024 65536 1415 ?521? 0? 1 41 57? 0 0? 5??? 140 1957488 335516 4858884? 0??? 0?? 768 81412 1504? 609? 0? 2 50 49? 0 ?

第2個(gè)是?CPU?做大量計(jì)算時(shí)表現(xiàn)出來(lái)的特征:

$ 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 4? 0??? 140 3625096 334256 3266584? 0??? 0???? 0??? 16 1054? 470 100 0? 0? 0? 0 4? 0??? 140 3625220 334264 3266576? 0??? 0???? 0??? 12 1037? 448 100 0? 0? 0? 0 4? 0??? 140 3624468 334264 3266580? 0??? 0???? 0?? 148 1160? 632 100 0? 0 ?0? 0 4? 0??? 140 3624468 334264 3266580? 0??? 0???? 0???? 0 1078? 527 100 0? 0? 0? 0 4? 0??? 140 3624712 334264 3266580? 0??? 0???? 0??? 80 1053? 501 100 0? 0? 0? 0

???????上面兩個(gè)樣例最明顯的區(qū)別就是?id?一欄,代表?CPU?的空暇率,復(fù)制文件時(shí)候?id?維持在?50%?左右。CPU?大量計(jì)算的時(shí)候?id?基本為?0。

1.2??底線

???????事先建立一個(gè)底線,假設(shè)性能監(jiān)測(cè)得到的統(tǒng)計(jì)數(shù)據(jù)跨過(guò)這條線,我們就能夠說(shuō)這個(gè)系統(tǒng)性能差,假設(shè)數(shù)據(jù)能保持在線內(nèi)我們就說(shuō)性能好。建立這樣底線須要知道一些理論、額外的負(fù)載測(cè)試和系統(tǒng)管理員多年的經(jīng)驗(yàn)。假設(shè)自己沒(méi)有多年的經(jīng)驗(yàn),有一個(gè)簡(jiǎn)單劃底線的辦法就是:把這個(gè)底線建立在自己對(duì)系統(tǒng)的期望上。自己期望這個(gè)系統(tǒng)有個(gè)什么樣的性能,這是一個(gè)底線,假設(shè)沒(méi)有達(dá)到這個(gè)要求就是性能差。

1.3??監(jiān)測(cè)工具

工具

簡(jiǎn)介

top

查看進(jìn)程活動(dòng)狀態(tài)以及一些系統(tǒng)狀況

vmstat

查看系統(tǒng)狀態(tài)、硬件和系統(tǒng)信息等

iostat

查看CPU?負(fù)載,硬盤(pán)狀況

sar

綜合工具。查看系統(tǒng)狀況

mpstat

查看多處理器狀況

netstat

查看網(wǎng)絡(luò)狀況

iptraf

實(shí)時(shí)網(wǎng)絡(luò)狀況監(jiān)測(cè)

tcpdump

抓取網(wǎng)絡(luò)數(shù)據(jù)包,具體分析

mpstat

查看多處理器狀況

tcptrace

數(shù)據(jù)包分析工具

netperf

網(wǎng)絡(luò)帶寬工具

dstat

綜合工具,綜合了?vmstat, iostat, ifstat, netstat?等多個(gè)信息

二. CPU

???????CPU?的占用主要取決于什么樣的資源正在?CPU?上面執(zhí)行。比方拷貝一個(gè)文件通常占用較少?CPU。由于大部分工作是由?DMA(Direct Memory Access)完畢,僅僅是在完畢拷貝以后給一個(gè)中斷讓?CPU?知道拷貝已經(jīng)完畢;科學(xué)計(jì)算通常占用較多的?CPU。大部分計(jì)算工作都須要在?CPU?上完畢,內(nèi)存、硬盤(pán)等子系統(tǒng)僅僅做臨時(shí)的數(shù)據(jù)存儲(chǔ)工作。要想監(jiān)測(cè)和理解?CPU?的性能須要知道一些的操作系統(tǒng)的基本知識(shí),比方:中斷、進(jìn)程調(diào)度、進(jìn)程上下文切換、可執(zhí)行隊(duì)列等。

????這里用個(gè)樣例來(lái)簡(jiǎn)介一下這些概念和他們的關(guān)系。CPU每時(shí)每刻都有工作在做(進(jìn)程、線程)而且自己有一張工作清單(可執(zhí)行隊(duì)列)。由老板(進(jìn)程調(diào)度)來(lái)決定他該干什么,他須要和老板溝通以便得到老板的想法并及時(shí)調(diào)整自己的工作(上下文切換)。部分工作做完以后還須要及時(shí)向老板匯報(bào)(中斷),所以打工仔(CPU)除了做自己該做的工作以外。還有大量時(shí)間和精力花在溝通和匯報(bào)上。

???????CPU?也是一種硬件資源。和不論什么其它硬件設(shè)備一樣也須要驅(qū)動(dòng)和管理程序才干使用。我們能夠把內(nèi)核的進(jìn)程調(diào)度看作是?CPU?的管理程序,用來(lái)管理和分配?CPU?資源,合理安排進(jìn)程搶占?CPU。并決定哪個(gè)進(jìn)程該使用?CPU、哪個(gè)進(jìn)程該等待。操作系統(tǒng)內(nèi)核里的進(jìn)程調(diào)度主要用來(lái)調(diào)度兩類(lèi)資源:進(jìn)程(或線程)和中斷,進(jìn)程調(diào)度給不同的資源分配了不同的優(yōu)先級(jí),優(yōu)先級(jí)最高的是硬件中斷,其次是內(nèi)核(系統(tǒng))進(jìn)程。最后是用戶進(jìn)程。每一個(gè)?CPU?都維護(hù)著一個(gè)可執(zhí)行隊(duì)列。用來(lái)存放那些可執(zhí)行的線程。線程要么在睡眠狀態(tài)(blocked?正在等待?IO)要么在可執(zhí)行狀態(tài),假設(shè)?CPU?當(dāng)前負(fù)載太高而新的請(qǐng)求不斷,就會(huì)出現(xiàn)進(jìn)程調(diào)度臨時(shí)應(yīng)付只是來(lái)的情況,這個(gè)時(shí)候就不得不把線程臨時(shí)放到可執(zhí)行隊(duì)列里。

能夠從下面幾個(gè)方面監(jiān)控CPU的信息:

(1)中斷;

(2)上下文切換。

(3)可執(zhí)行隊(duì)列。

(4)CPU?利用率。

2.1?底線

通常我們期望我們的系統(tǒng)能到達(dá)下面目標(biāo):

???????(1)CPU?利用率。假設(shè)?CPU?有?100%?利用率。那么應(yīng)該到達(dá)這樣一個(gè)平衡:65%-70%?User Time,30%-35%?System Time。0%-5%?Idle Time;

???????(2)上下文切換,上下文切換應(yīng)該和?CPU?利用率聯(lián)系起來(lái)看,假設(shè)能保持上面的?CPU?利用率平衡,大量的上下文切換是能夠接受的;

???????(3)可執(zhí)行隊(duì)列。每一個(gè)可執(zhí)行隊(duì)列不應(yīng)該有超過(guò)1-3個(gè)線程(每處理器),比方:雙處理器系統(tǒng)的可執(zhí)行隊(duì)列里不應(yīng)該超過(guò)6個(gè)線程。

2.2??vmstat

???????vmstat?是個(gè)查看系統(tǒng)總體性能的小工具,小巧、即使在非常?heavy?的情況下也執(zhí)行良好,而且能夠用時(shí)間間隔採(cǎi)集得到連續(xù)的性能數(shù)據(jù)。

$ 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 2? 1??? 140 2787980 336304 3531996? 0??? 0???? 0?? 128 1166 5033? 3? 3 70 25? 0 0? 1??? 140 2788296 336304 3531996? 0??? 0???? 0???? 0 1194 5605 ?3? 3 69 25? 0 0? 1??? 140 2788436 336304 3531996? 0??? 0???? 0???? 0 1249 8036? 5? 4 67 25? 0 0? 1??? 140 2782688 336304 3531996? 0??? 0???? 0???? 0 1333 7792? 6? 6 64 25? 0 3? 1??? 140 2779292 336304 3531992? 0??? 0???? 0??? 28 1323 7087? 4? 5 67 25? 0

參數(shù)介紹:

(1).??????r。可執(zhí)行隊(duì)列的線程數(shù)。這些線程都是可執(zhí)行狀態(tài),僅僅只是?CPU?臨時(shí)不可用;

(2).??????b,被?blocked?的進(jìn)程數(shù)。正在等待?IO?請(qǐng)求;

(3).??????in,被處理過(guò)的中斷數(shù)

(4).??????cs,系統(tǒng)上正在做上下文切換的數(shù)目

(5).??????us,用戶占用?CPU?的百分比

(6).??????sys,內(nèi)核和中斷占用?CPU?的百分比

(7).??????wa。全部可執(zhí)行的線程被?blocked?以后都在等待?IO,這時(shí)候?CPU?空暇的百分比

(8).??????id,CPU?全然空暇的百分比

舉兩個(gè)現(xiàn)實(shí)中的樣例來(lái)實(shí)際分析一下:

$ 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 4? 0??? 140 2915476 341288 3951700? 0??? 0???? 0???? 0 1057? 523 19 81? 0? 0? 0 4? 0??? 140 2915724 341296 3951700? 0??? 0???? 0???? 0 1048? 546 19 81? 0? 0? 0 4? 0??? 140 2915848 341296 3951700? 0??? 0???? 0???? 0 1044? 514 18 82? 0? 0? 0 4? 0??? 140 2915848 341296 3951700? 0??? 0???? 0??? 24 1044? 564 20 80? 0? 0? 0 4? 0??? 140 2915848 341296 3951700? 0??? 0?? ??0???? 0 1060? 546 18 82? 0? 0? 0

從上面的數(shù)據(jù)能夠看出幾點(diǎn):

(1).??????interrupts(in)很高。context switch(cs)比較低。說(shuō)明這個(gè)?CPU?一直在不停的請(qǐng)求資源;

(2).??????user time(us)一直保持在?80%?以上,并且上下文切換較低(cs)。說(shuō)明某個(gè)進(jìn)程可能一直霸占著?CPU;

(3).??????run queue(r)剛好在4個(gè)。

$ 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 14? 0??? 140 2904316 341912 3952308? 0??? 0???? 0?? 460 1106 9593 36 64? 1? 0? 0 17? 0??? 140 2903492 341912 3951780? 0??? 0???? 0???? 0 1037 9614 35 65? 1? 0? 0 20? 0??? 140 2902016 341912 3952000? 0??? 0???? 0???? 0 1046 9739 35 64? 1? 0? 0 17? 0??? 140 2903904 341912 3951888? 0??? 0???? 0??? 76 1044 9879 37 63? 0? 0? 0 16? 0??? 140 2904580 341912 3952108? 0??? 0???? 0???? 0 1055 9808 34 65? 1? 0? 0

從上面的數(shù)據(jù)能夠看出幾點(diǎn):

(1).??????context switch(cs)比?interrupts(in)要高得多。說(shuō)明內(nèi)核不得不來(lái)回切換進(jìn)程;

(2).??????進(jìn)一步觀察發(fā)現(xiàn)?system time(sy)非常高而?user time(us)非常低,并且加上高頻度的上下文切換(cs),說(shuō)明正在執(zhí)行的應(yīng)用程序調(diào)用了大量的系統(tǒng)調(diào)用(system call);

(3).??????run queue(r)在14個(gè)線程以上,依照這個(gè)測(cè)試機(jī)器的硬件配置(四核),應(yīng)該保持在12個(gè)以內(nèi)。

我上午CPU 100%時(shí)的信息:

top - 11:49:08 up 50 days, 22:25,??6 users,??load average: 59.79, 59.98, 60.50

Tasks: 200 total,??61 running, 139 sleeping,???0 stopped,???0 zombie

Cpu0??: 26.5%us, 73.5%sy,??0.0%ni,??0.0%id,??0.0%wa,??0.0%hi,??0.0%si,??0.0%st

Cpu1??: 25.0%us, 75.0%sy,??0.0%ni,??0.0%id,??0.0%wa,??0.0%hi,??0.0%si,??0.0%st

Mem:???1939780k total,??1744412k used,???195368k free,????95704k buffers

Swap:??4401800k total,???662836k used,??3738964k free,???811124k cached

[root@localhost ~]# vmstat 2 10

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

?r??b???swpd???free???buff??cache???si???so????bi????bo???in???cs us sy id wa st

58??1 662836 195988??95428 810740????0????0?????4???106????4????1 23??4 72??1??0

59??1 662836 195988??95448 810732????0????0?????0???128??235??221 28 72??0??0??0

59??1 662836 195988??95448 810768????0????0?????0?????0??216??209 28 72??0??0??0

2.3??mpstat

???????mpstat?和?vmstat?類(lèi)似,不同的是?mpstat?能夠輸出多個(gè)處理器的數(shù)據(jù)。

注意:須要安裝sysstat?包后才有這個(gè)命令,能夠使用yum安裝:

???????#yum install sysstat

???????sysstat?包括iostat、mpstat、sar、命令。

[root@localhost gmail]# export LANG=en_US [root@localhost gmail]# mpstat -P ALL??? Linux 2.6.18-8.el5xen (localhost.localdomain)?? 02/21/2011 ? 10:20:16 PM? CPU?? %user?? %nice??? %sys %iowait??? %irq?? %soft? %steal?? %idle??? intr/s 10:20:16 PM? all?? 11.49??? 0.00??? 2.58??? 1.04??? 0.01??? 0.13??? 0.01?? 84.74??? 314.61 10:20:16 PM??? 0?? 15.73??? 0.00??? 2.56??? 0.55??? 0.02??? 0.23??? 0.01? ?80.89??? 241.09 10:20:16 PM??? 1??? 7.25??? 0.00??? 2.60??? 1.53??? 0.00??? 0.02??? 0.01?? 88.59???? 73.52 [root@localhost gmail]# mpstat -P ALL 1 Linux 2.6.18-8.el5xen (localhost.localdomain)?? 02/21/2011 ? 10:20:18 PM? CPU?? %user?? %nice??? %sys %iowait??? %irq?? %soft? %steal?? %idle??? intr/s 10:20:19 PM? all??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00? 100.00??? 136.63 10:20:19 PM??? 0??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00? 100.00???? 86.14 10:20:19 PM??? 1??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00? 100.00???? 50.50 ? 10:20:19 PM? CPU?? %user?? %nice??? %sys %iowait??? %irq?? %soft? %steal?? %idle??? intr/s 10:20:20 PM? all??? 0.00??? 0.00??? 0.00??? 0.47??? 0.00??? 0.00??? 0.00?? 99.53??? 105.00 10:20:20 PM? ??0??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00? 100.00???? 79.00 10:20:20 PM??? 1??? 0.00??? 0.00??? 0.00??? 0.90??? 0.00??? 0.00??? 0.00?? 99.10???? 26.00 ?

2.4??ps

查看某個(gè)程序、進(jìn)程占用了多少?CPU?資源:

[root@localhost gmail]#? while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep 'oracle'; sleep 1; done ? PID ?NI PRI %CPU PSR COMMAND 3668?? 0? 24? 0.0?? 0 oracle 3670?? 0? 21? 0.0?? 0 oracle 3672?? 0? 24? 0.0?? 0 oracle 3674?? 0? 23? 0.0 ??0 oracle 3676?? 0? 24? 0.0?? 1 oracle 3678?? 0? 23? 0.0?? 0 oracle 3680?? 0? 21? 0.0?? 1 oracle 3682?? 0? 24? 0.0?? 1 oracle 3684?? 0? 24? 0.0?? 0 oracle 3686?? 0? 21? 0.0?? 0 oracle

三. Memory

???????這里的講到的?“內(nèi)存”?包含物理內(nèi)存和虛擬內(nèi)存。虛擬內(nèi)存(Virtual Memory)把計(jì)算機(jī)的內(nèi)存空間擴(kuò)展到硬盤(pán),物理內(nèi)存(RAM)和硬盤(pán)的一部分空間(SWAP)組合在一起作為虛擬內(nèi)存為計(jì)算機(jī)提供了一個(gè)連貫的虛擬內(nèi)存空間,優(yōu)點(diǎn)是我們擁有的內(nèi)存?”變多了“,能夠執(zhí)行很多其它、更大的程序,壞處是把部分硬盤(pán)當(dāng)內(nèi)存用總體性能受到影響。硬盤(pán)讀寫(xiě)速度要比內(nèi)存慢幾個(gè)數(shù)量級(jí)。而且?RAM?和?SWAP之間的交換添加了系統(tǒng)的負(fù)擔(dān)。

???????在操作系統(tǒng)里,虛擬內(nèi)存被分成頁(yè),在?x86?系統(tǒng)上每一個(gè)頁(yè)大小是?4KB。?Linux?內(nèi)核讀寫(xiě)虛擬內(nèi)存是以?“頁(yè)”?為單位操作的,把內(nèi)存轉(zhuǎn)移到硬盤(pán)交換空間(SWAP)和從交換空間讀取到內(nèi)存的時(shí)候都是按頁(yè)來(lái)讀寫(xiě)的。內(nèi)存和?SWAP?的這樣的交換過(guò)程稱(chēng)為頁(yè)面交換(Paging),值得注意的是?paging?和?swapping?是兩個(gè)全然不同的概念,國(guó)內(nèi)非常多參考書(shū)把這兩個(gè)概念混為一談,swapping?也翻譯成交換,在操作系統(tǒng)里是指把某程序全然交換到硬盤(pán)以騰出內(nèi)存給新程序使用,和?paging?僅僅交換程序的部分(頁(yè)面)是兩個(gè)不同的概念。純粹的?swapping?在現(xiàn)代操作系統(tǒng)中已經(jīng)非常難看到了,由于把整個(gè)程序交換到硬盤(pán)的辦法既耗時(shí)又費(fèi)力并且不是必需,現(xiàn)代操作系統(tǒng)基本都是?paging?或者?paging/swapping?混合,swapping?最初是在?Unix system V?上實(shí)現(xiàn)的。

在這里僅僅介紹和性能監(jiān)測(cè)有關(guān)的兩個(gè)內(nèi)核進(jìn)程:kswapd?和?pdflush。

???????(1)kswapd daemon?用來(lái)檢查?pages_high?和?pages_low,假設(shè)可用內(nèi)存少于?pages_low,kswapd?就開(kāi)始掃描并試圖釋放?32個(gè)頁(yè)面。而且反復(fù)掃描釋放的過(guò)程直到可用內(nèi)存大于?pages_high?為止。

???????掃描的時(shí)候檢查3件事:

???????1)假設(shè)頁(yè)面沒(méi)有改動(dòng),把頁(yè)放到可用內(nèi)存列表里。

???????2)假設(shè)頁(yè)面被文件系統(tǒng)改動(dòng),把頁(yè)面內(nèi)容寫(xiě)到磁盤(pán)上;

???????3)假設(shè)頁(yè)面被改動(dòng)了。但不是被文件系統(tǒng)改動(dòng)的。把頁(yè)面寫(xiě)到交換空間。

???????(2)pdflush daemon?用來(lái)同步文件相關(guān)的內(nèi)存頁(yè)面。把內(nèi)存頁(yè)面及時(shí)同步到硬盤(pán)上。比方打開(kāi)一個(gè)文件。文件被導(dǎo)入到內(nèi)存里。對(duì)文件做了改動(dòng)后并保存后,內(nèi)核并不立即保存文件到硬盤(pán),由?pdflush?決定什么時(shí)候把對(duì)應(yīng)頁(yè)面寫(xiě)入硬盤(pán),這由一個(gè)內(nèi)核參數(shù)?vm.dirty_background_ratio?來(lái)控制,比方以下的參數(shù)顯示臟頁(yè)面(dirty pages)達(dá)到全部?jī)?nèi)存頁(yè)面10%的時(shí)候開(kāi)始寫(xiě)入硬盤(pán)。

# /sbin/sysctl -n vm.dirty_background_ratio

10

3.1??vmstat

# 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 0? 3 252696?? 2432??? 268?? 7148 3604 2368? 3608? 2372? 288? 288? 0? 0 21 78? 1 0? 2 253484?? 2216??? 228?? 7104 5368 2976? 5372? 3036? 930? 519? 0? 0? 0 100? 0 0? 1 259252?? 2616??? 128?? 6148 19784 18712 19784 18712 3821 1853? 0? 1? 3 95? 1 1? 2 260008?? 2188??? 144?? 6824 11824 2584 12664? 2584 1347 1174 14? 0? 0 86? 0 2? 1 262140?? 2964??? 128?? 5852 24912 17304 24952 17304 4737 2341 86 10? 0? 0? 4 ? 部分參數(shù)說(shuō)明:

(1).??????swpd,已使用的?SWAP?空間大小,KB?為單位;

(2).??????free,可用的物理內(nèi)存大小,KB?為單位;

(3).??????buff,物理內(nèi)存用來(lái)緩存讀寫(xiě)操作的?buffer?大小,KB?為單位。

(4).??????cache,物理內(nèi)存用來(lái)緩存進(jìn)程地址空間的?cache?大小,KB?為單位;

(5).??????si,數(shù)據(jù)從?SWAP?讀取到?RAM(swap in)的大小。KB?為單位。

(6).??????so。數(shù)據(jù)從?RAM?寫(xiě)到?SWAP(swap out)的大小,KB?為單位;

(7).??????bi,磁盤(pán)塊從文件系統(tǒng)或?SWAP?讀取到?RAM(blocks in)的大小。block?為單位;

(8).??????bo。磁盤(pán)塊從?RAM?寫(xiě)到文件系統(tǒng)或?SWAP(blocks out)的大小,block?為單位;

上面是一個(gè)頻繁讀寫(xiě)交換區(qū)的樣例,能夠觀察到下面幾點(diǎn):

(1).??????物理可用內(nèi)存?free?基本沒(méi)什么顯著變化。swapd?逐步添加,說(shuō)明最小可用的內(nèi)存始終保持在?256MB(物理內(nèi)存大小) * 10%?= 2.56MB?左右,當(dāng)臟頁(yè)達(dá)到10%的時(shí)候(vm.dirty_background_ratio?=?10)就開(kāi)始大量使用?swap。

(2).??????buff?穩(wěn)步降低說(shuō)明系統(tǒng)知道內(nèi)存不夠了。kwapd?正在從?buff?那里借用部分內(nèi)存。

(3).??????kswapd?持續(xù)把臟頁(yè)面寫(xiě)到?swap?交換區(qū)(so),而且從?swapd?逐漸添加看出確實(shí)如此。依據(jù)上面講的?kswapd?掃描時(shí)檢查的三件事,假設(shè)頁(yè)面被改動(dòng)了。但不是被文件系統(tǒng)改動(dòng)的。把頁(yè)面寫(xiě)到?swap。所以這里?swapd?持續(xù)添加。

四. IO

???????磁盤(pán)一般是計(jì)算機(jī)最慢的子系統(tǒng),也是最easy出現(xiàn)性能瓶頸的地方,由于磁盤(pán)離?CPU?距離最遠(yuǎn)并且?CPU?訪問(wèn)磁盤(pán)要涉及到機(jī)械操作。比方轉(zhuǎn)軸、尋軌等。訪問(wèn)硬盤(pán)和訪問(wèn)內(nèi)存之間的速度區(qū)別是以數(shù)量級(jí)來(lái)計(jì)算的,就像1天和1分鐘的區(qū)別一樣。

要監(jiān)測(cè)?IO?性能。有必要了解一下基本原理和?Linux?是怎樣處理硬盤(pán)和內(nèi)存之間的?IO?的。

4.1?內(nèi)存頁(yè)

在第三節(jié)Memory中提到了內(nèi)存和硬盤(pán)之間的?IO?是以頁(yè)為單位來(lái)進(jìn)行的。在?Linux?系統(tǒng)上1頁(yè)的大小為?4K。

能夠用下面命令查看系統(tǒng)默認(rèn)的頁(yè)面大小:

$ /usr/bin/time -v date

???????...

???????Page size (bytes): 4096

???????...

4.2?缺頁(yè)中斷

???????Linux?利用虛擬內(nèi)存極大的擴(kuò)展了程序地址空間,使得原來(lái)物理內(nèi)存不能容下的程序也能夠通過(guò)內(nèi)存和硬盤(pán)之間的不斷交換(把臨時(shí)不用的內(nèi)存頁(yè)交換到硬盤(pán),把須要的內(nèi)存頁(yè)從硬盤(pán)讀到內(nèi)存)來(lái)贏得很多其它的內(nèi)存,看起來(lái)就像物理內(nèi)存被擴(kuò)大了一樣。其實(shí)這個(gè)過(guò)程對(duì)程序是全然透明的,程序全然不用理會(huì)自己哪一部分、什么時(shí)候被交換進(jìn)內(nèi)存,一切都有內(nèi)核的虛擬內(nèi)存管理來(lái)完畢。當(dāng)程序啟動(dòng)的時(shí)候,Linux?內(nèi)核首先檢查?CPU?的緩存和物理內(nèi)存,假設(shè)數(shù)據(jù)已經(jīng)在內(nèi)存里就忽略,假設(shè)數(shù)據(jù)不在內(nèi)存里就引起一個(gè)缺頁(yè)中斷(Page Fault),然后從硬盤(pán)讀取缺頁(yè)。并把缺頁(yè)緩存到物理內(nèi)存里。缺頁(yè)中斷可分為主缺頁(yè)中斷(Major Page Fault)和次缺頁(yè)中斷(Minor Page Fault),要從磁盤(pán)讀取數(shù)據(jù)而產(chǎn)生的中斷是主缺頁(yè)中斷;數(shù)據(jù)已經(jīng)被讀入內(nèi)存并被緩存起來(lái),從內(nèi)存緩存區(qū)中而不是直接從硬盤(pán)中讀取數(shù)據(jù)而產(chǎn)生的中斷是次缺頁(yè)中斷。

???????上面的內(nèi)存緩存區(qū)起到了預(yù)讀硬盤(pán)的作用,內(nèi)核先在物理內(nèi)存里尋找缺頁(yè),沒(méi)有的話產(chǎn)生次缺頁(yè)中斷從內(nèi)存緩存里找,假設(shè)還沒(méi)有發(fā)現(xiàn)的話就從硬盤(pán)讀取。

非常顯然,把多余的內(nèi)存拿出來(lái)做成內(nèi)存緩存區(qū)提高了訪問(wèn)速度。這里另一個(gè)命中率的問(wèn)題,運(yùn)氣好的話假設(shè)每次缺頁(yè)都能從內(nèi)存緩存區(qū)讀取的話將會(huì)極大提高性能。要提高命中率的一個(gè)簡(jiǎn)單方法就是增大內(nèi)存緩存區(qū)面積。緩存區(qū)越大預(yù)存的頁(yè)面就越多。命中率也會(huì)越高。

???????以下的?time?命令能夠用來(lái)查看某程序第一次啟動(dòng)的時(shí)候產(chǎn)生了多少主缺頁(yè)中斷和次缺頁(yè)中斷:

$ /usr/bin/time -v date ??????? ... ??????? Major (requiring I/O) page faults: 1 ??????? Minor (reclaiming a frame) page faults: 260 ??????? ... ?

4.3??File Buffer Cache

???????從上面的內(nèi)存緩存區(qū)(也叫文件緩存區(qū)?File Buffer Cache)讀取頁(yè)比從硬盤(pán)讀取頁(yè)要快得多,所以?Linux?內(nèi)核希望能盡可能產(chǎn)生次缺頁(yè)中斷(從文件緩存區(qū)讀),而且能盡可能避免主缺頁(yè)中斷(從硬盤(pán)讀),這樣隨著次缺頁(yè)中斷的增多,文件緩存區(qū)也逐步增大,直到系統(tǒng)僅僅有少量可用物理內(nèi)存的時(shí)候?Linux?才開(kāi)始釋放一些不用的頁(yè)。我們執(zhí)行?Linux?一段時(shí)間后會(huì)發(fā)現(xiàn)盡管系統(tǒng)上執(zhí)行的程序不多,可是可用內(nèi)存總是非常少,這樣給大家造成了?Linux?對(duì)內(nèi)存管理非常低效的假象。其實(shí)?Linux?把那些臨時(shí)不用的物理內(nèi)存高效的利用起來(lái)做預(yù)存(內(nèi)存緩存區(qū))呢。以下是一臺(tái)?Sun?server上的物理內(nèi)存和文件緩存區(qū)的情況:

$ cat /proc/meminfo MemTotal:??? ??8182776 kB MemFree:?????? 3053808 kB Buffers:??????? 342704 kB Cached:??????? 3972748 kB

???????這臺(tái)server總共同擁有?8GB?物理內(nèi)存(MemTotal),3GB?左右可用內(nèi)存(MemFree),343MB?左右用來(lái)做磁盤(pán)緩存(Buffers),4GB?左右用來(lái)做文件緩存區(qū)(Cached)。可見(jiàn)?Linux?真的用了非常多物理內(nèi)存做?Cache。并且這個(gè)緩存區(qū)還能夠不斷增長(zhǎng)。

4.4?頁(yè)面類(lèi)型

Linux?中內(nèi)存頁(yè)面有三種類(lèi)型:

(1).??????Read pages,僅僅讀頁(yè)(或代碼頁(yè)),那些通過(guò)主缺頁(yè)中斷從硬盤(pán)讀取的頁(yè)面。包含不能改動(dòng)的靜態(tài)文件、可運(yùn)行文件、庫(kù)文件等。當(dāng)內(nèi)核須要它們的時(shí)候把它們讀到內(nèi)存中,當(dāng)內(nèi)存不足的時(shí)候。內(nèi)核就釋放它們到空暇列表,當(dāng)程序再次須要它們的時(shí)候須要通過(guò)缺頁(yè)中斷再次讀到內(nèi)存。

(2).??????Dirty pages。臟頁(yè),指那些在內(nèi)存中被改動(dòng)過(guò)的數(shù)據(jù)頁(yè),比方文本文件等。這些文件由?pdflush?負(fù)責(zé)同步到硬盤(pán),內(nèi)存不足的時(shí)候由?kswapd?和?pdflush?把數(shù)據(jù)寫(xiě)回硬盤(pán)并釋放內(nèi)存。

(3).??????Anonymous pages,匿名頁(yè),那些屬于某個(gè)進(jìn)程可是又和不論什么文件無(wú)關(guān)聯(lián),不能被同步到硬盤(pán)上,內(nèi)存不足的時(shí)候由?kswapd?負(fù)責(zé)將它們寫(xiě)到交換分區(qū)并釋放內(nèi)存。

4.5??IO’s Per Second(IOPS)

???????每次磁盤(pán)?IO?請(qǐng)求都須要一定的時(shí)間,和訪問(wèn)內(nèi)存比起來(lái)這個(gè)等待時(shí)間簡(jiǎn)直難以忍受。

在一臺(tái)?2001?年的典型?1GHz PC?上,磁盤(pán)隨機(jī)訪問(wèn)一個(gè)?word?須要?8,000,000 nanosec = 8 millisec。順序訪問(wèn)一個(gè)?word?須要?200 nanosec;而從內(nèi)存訪問(wèn)一個(gè)?word?僅僅須要?10 nanosec.(數(shù)據(jù)來(lái)自:Teach Yourself Programming in Ten Years)這個(gè)硬盤(pán)能夠提供?125?次?IOPS(1000 ms / 8 ms)。

4.6??順序?IO?和?隨機(jī)?IO

???????IO?可分為順序?IO?和?隨機(jī)?IO?兩種。性能監(jiān)測(cè)前須要弄清楚系統(tǒng)偏向順序?IO?的應(yīng)用還是隨機(jī)?IO?應(yīng)用。

???????(1)順序?IO?是指同一時(shí)候順序請(qǐng)求大量數(shù)據(jù)。比方數(shù)據(jù)庫(kù)運(yùn)行大量的查詢、流媒體服務(wù)等,順序?IO?能夠同一時(shí)候非常快的移動(dòng)大量數(shù)據(jù)。能夠這樣來(lái)評(píng)估?IOPS?的性能,用每秒讀寫(xiě)?IO?字節(jié)數(shù)除以每秒讀寫(xiě)?IOPS?數(shù),rkB/s?除以?r/s。wkB/s?除以?w/s.?以下顯示的是連續(xù)2秒的?IO?情況。可見(jiàn)每次?IO?寫(xiě)的數(shù)據(jù)是添加的(45060.00 / 99.00 = 455.15 KB per IO。54272.00 / 112.00 = 484.57 KB per IO)。

???????相對(duì)隨機(jī)?IO?而言,順序?IO?更應(yīng)該重視每次?IO?的吞吐能力(KB per IO):

$ iostat -kx 1 avg-cpu:? %user?? %nice %system %iowait? %steal?? %idle ?????????? 0.00??? 0.00??? 2.50?? 25.25??? 0.00?? 72.25 ? Device:? rrqm/s?? wrqm/s?? r/s?? w/s??? rkB/s??? wkB/s avgrq-sz avgqu-sz?? await? svctm? %util sdb?????? 24.00 19995.00 29.00 99.00? 4228.00 45060.00?? 770.12??? 45.01? 539.65?? 7.80? 99.80 ? avg-cpu:? %user?? %nice %system %iowait? %steal?? %idle ?????????? 0.00??? 0.00??? 1.00?? 30.67??? 0.00?? 68.33 ? Device:? rrqm/s?? wrqm/s?? r/s?? w/s??? rkB/s??? wkB/s avgrq-sz avgqu-sz?? await? svctm? %util sdb??????? 3.00 12235.00? 3.00 112.00?? 768.00 54272.00?? 957.22?? 144.85? 576.44?? 8.70 100.10

???????(2)隨機(jī)?IO?是指隨機(jī)請(qǐng)求數(shù)據(jù),其?IO?速度不依賴于數(shù)據(jù)的大小和排列,依賴于磁盤(pán)的每秒能?IO?的次數(shù)。比方?Web?服務(wù)、Mail?服務(wù)等每次請(qǐng)求的數(shù)據(jù)都非常小,隨機(jī)?IO?每秒同一時(shí)候會(huì)有很多其它的請(qǐng)求數(shù)產(chǎn)生,所以磁盤(pán)的每秒能?IO?多少次是關(guān)鍵。

$ iostat -kx 1 avg-cpu:? %user?? %nice %system %iowait? %steal?? %idle ?????????? 1.75??? 0.00??? 0.75??? 0.25??? 0.00?? 97.26 ? Device:? rrqm/s?? wrqm/s?? r/s?? w/s??? rkB/s??? wkB/s avgrq-sz avgqu-sz?? await? svctm? %util sdb??????? 0.00??? 52.00? 0.00 57.00???? 0.00?? 436.00??? 15.30???? 0.03??? 0.54?? 0.23?? 1.30 ? avg-cpu:? %user?? %nice %system %iowait? %steal?? %idle ?????????? 1.75??? 0.00??? 0.75??? 0.25??? 0.00?? 97.24 ? Device:? rrqm/s?? wrqm/s?? r/s?? w/s??? rkB/s??? wkB/s avgrq-sz avgqu-sz?? await? svctm? %util sdb??????? 0.00??? 56.44? 0.00 66.34???? 0.00?? 491.09??? 14.81???? 0.04??? 0.54?? 0.19?? 1.29

???????依照上面的公式得出:436.00 / 57.00 = 7.65 KB per IO,491.09 / 66.34 = 7.40 KB per IO.?與順序?IO?比較發(fā)現(xiàn)。隨機(jī)?IO?的?KB per IO?小到能夠忽略不計(jì),可見(jiàn)對(duì)于隨機(jī)?IO?而言重要的是每秒能?IOPS?的次數(shù),而不是每次?IO?的吞吐能力(KB per IO)。

4.7 SWAP

???????當(dāng)系統(tǒng)沒(méi)有足夠物理內(nèi)存來(lái)應(yīng)付全部請(qǐng)求的時(shí)候就會(huì)用到?swap?設(shè)備,swap?設(shè)備能夠是一個(gè)文件。也能夠是一個(gè)磁盤(pán)分區(qū)。只是要小心的是。使用?swap?的代價(jià)非常大。假設(shè)系統(tǒng)沒(méi)有物理內(nèi)存可用,就會(huì)頻繁?swapping。假設(shè)?swap?設(shè)備和程序正要訪問(wèn)的數(shù)據(jù)在同一個(gè)文件系統(tǒng)上,那會(huì)碰到嚴(yán)重的?IO?問(wèn)題,終于導(dǎo)致整個(gè)系統(tǒng)遲緩。甚至崩潰。

swap?設(shè)備和內(nèi)存之間的?swapping?狀況是推斷?Linux?系統(tǒng)性能的重要參考,我們已經(jīng)有非常多工具能夠用來(lái)監(jiān)測(cè)?swap?和?swapping?情況,比方:top、cat /proc/meminfo、vmstat?等:

$ cat /proc/meminfo MemTotal:????? 8182776 kB MemFree:?????? 2125476 kB Buffers:??????? 347952 kB Cached:??????? 4892024 kB SwapCached:??????? 112 kB ... SwapTotal:???? 4096564 kB SwapFree:????? 4096424 kB ... ? $ 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? 2 260008?? 2188??? 144?? 6824 11824 2584 12664? 2584 1347 1174 14? 0? 0 86? 0 2? 1 262140?? 2964??? 128?? 5852 24912 17304 24952 17304 4737 2341 86 10? 0? 0

五. network

???????網(wǎng)絡(luò)的監(jiān)測(cè)是全部?Linux?子系統(tǒng)里面最復(fù)雜的,有太多的因素在里面,比方:延遲、堵塞、沖突、丟包等,更糟的是與?Linux?主機(jī)相連的路由器、交換機(jī)、無(wú)線信號(hào)都會(huì)影響到總體網(wǎng)絡(luò)而且非常難推斷是由于?Linux?網(wǎng)絡(luò)子系統(tǒng)的問(wèn)題還是別的設(shè)備的問(wèn)題。添加了監(jiān)測(cè)和推斷的復(fù)雜度。

如今我們使用的全部網(wǎng)卡都稱(chēng)為自適應(yīng)網(wǎng)卡,意思是說(shuō)能依據(jù)網(wǎng)絡(luò)上的不同網(wǎng)絡(luò)設(shè)備導(dǎo)致的不同網(wǎng)絡(luò)速度和工作模式進(jìn)行自己主動(dòng)調(diào)整。我們能夠通過(guò)?ethtool?工具來(lái)查看網(wǎng)卡的配置和工作模式:

# /sbin/ethtool eth0 Settings for eth0: ??????? Supported ports: [ TP ] ??????? Supported link modes:?? 10baseT/Half 10baseT/Full ??????? ??????????????????????? 100baseT/Half 100baseT/Full ??????? ??????????????????????? 1000baseT/Half 1000baseT/Full ??????? Supports auto-negotiation: Yes ??????? Advertised link modes:? 10baseT/Half 10baseT/Full ??????? ??????????????????????? 100baseT/Half 100baseT/Full ??????? ??????????????????????? 1000baseT/Half 1000baseT/Full ??????? Advertised auto-negotiation: Yes ??????? Speed: 100Mb/s ??????? Duplex: Full ??????? Port: Twisted Pair ??????? PHYAD: 1 ??????? Transceiver: internal ??????? Auto-negotiation: on ??????? Supports Wake-on: g ??????? Wake-on: g ??????? Current message level: 0x000000ff (255) ??????? Link detected: yes

???????上面給出的樣例說(shuō)明網(wǎng)卡有?10baseT。100baseT?和?1000baseT?三種選擇,眼下正自適應(yīng)為?100baseT(Speed: 100Mb/s)。能夠通過(guò)?ethtool?工具強(qiáng)制網(wǎng)卡工作在?1000baseT?下:

# /sbin/ethtool -s eth0 speed 1000 duplex full autoneg off ?

5.1??iptraf

???????兩臺(tái)主機(jī)之間有網(wǎng)線(或無(wú)線)、路由器、交換機(jī)等設(shè)備。測(cè)試兩臺(tái)主機(jī)之間的網(wǎng)絡(luò)性能的一個(gè)辦法就是在這兩個(gè)系統(tǒng)之間互發(fā)數(shù)據(jù)并統(tǒng)計(jì)結(jié)果,看看吞吐量、延遲、速率怎樣。

iptraf?就是一個(gè)非常好的查看本機(jī)網(wǎng)絡(luò)吞吐量的好工具。支持文字圖形界面,非常直觀。以下圖片顯示在?100 mbps?速率的網(wǎng)絡(luò)下這個(gè)?Linux?系統(tǒng)的發(fā)送傳輸率有點(diǎn)慢,Outgoing rates?僅僅有?66 mbps.

# iptraf -d eth0

5.2??netperf

???????netperf?執(zhí)行在?client/server?模式下,比?iptraf?能很多其它樣化的測(cè)試終端的吞吐量。先在服務(wù)器端啟動(dòng)?netserver:

# netserver Starting netserver at port 12865 Starting netserver at hostname 0.0.0.0 port 12865 and family AF_UNSPEC

然后在client測(cè)試server。運(yùn)行一次持續(xù)10秒的?TCP?測(cè)試:

# netperf -H 172.16.38.36 -l 10 TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.38.36 (172.16.38.36) port 0 AF_INET Recv?? Send??? Send Socket Socket? Message? Elapsed Size?? Size??? Size???? Time???? Throughput bytes? bytes?? bytes??? secs.??? 10^6bits/sec? ? 87380? 16384? 16384??? 10.32????? 93.68

???????從以上輸出能夠看出,網(wǎng)絡(luò)吞吐量在?94mbps?左右,對(duì)于?100mbps?的網(wǎng)絡(luò)來(lái)說(shuō)這個(gè)性能算的上非常不錯(cuò)。以上測(cè)試是在server和client位于同一個(gè)局域網(wǎng),而且局域網(wǎng)是有線網(wǎng)的情況,你也能夠試試不同結(jié)構(gòu)、不同速率的網(wǎng)絡(luò),比方:網(wǎng)絡(luò)之間中間多幾個(gè)路由器、client在?wi-fi、VPN?等情況。

???????netperf?還能夠通過(guò)建立一個(gè)?TCP?連接并順序地發(fā)送數(shù)據(jù)包來(lái)測(cè)試每秒有多少?TCP?請(qǐng)求和響應(yīng)。以下的輸出顯示在?TCP requests?使用?2K?大小,responses?使用?32K?的情況下處理速率為每秒243:

? # netperf -t TCP_RR -H 172.16.38.36 -l 10 -- -r 2048,32768 TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.38.36 (172.16.38.36) port 0 AF_INET Local /Remote Socket Size?? Request? Resp.?? Elapsed? Trans. Send?? Recv?? Size???? Size??? Time???? Rate bytes? Bytes? bytes??? bytes?? secs.??? per sec?? ? 16384? 87380? 2048???? 32768?? 10.00???? 243.03 16384? 87380 ?

5.3??iperf

???????iperf?和?netperf?執(zhí)行方式類(lèi)似,也是?server/client?模式,先在服務(wù)器端啟動(dòng)?iperf:

# iperf -s -D ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ Running Iperf Server as a daemon The Iperf daemon process ID : 5695

???????然后在client對(duì)server進(jìn)行測(cè)試,client先連接到server端(172.16.38.36),并在30秒內(nèi)每隔5秒對(duì)server和client之間的網(wǎng)絡(luò)進(jìn)行一次帶寬測(cè)試和採(cǎi)樣:

# iperf -c 172.16.38.36 -t 30 -i 5 ------------------------------------------------------------ Client connecting to 172.16.38.36, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ [? 3] local 172.16.39.100 port 49515 connected with 172.16.38.36 port 5001 [ ID] Interval?????? Transfer???? Bandwidth [? 3]? 0.0- 5.0 sec? 58.8 MBytes? 98.6 Mbits/sec [ ID] Interval?????? Transfer???? Bandwidth [? 3]? 5.0-10.0 sec? 55.0 MBytes? 92.3 Mbits/sec [ ID] Interval?????? Transfer???? Bandwidth [? 3] 10.0-15.0 sec? 55.1 MBytes? 92.4 Mbits/sec [ ID] Interval?????? Transfer???? Bandwidth [? 3] 15.0-20.0 sec? 55.9 MBytes? 93.8 Mbits/sec [ ID] Interval?????? Transfer???? Bandwidth [? 3] 20.0-25.0 sec? 55.4 MBytes? 92.9 Mbits/sec [ ID] Interval?????? Transfer???? Bandwidth [? 3] 25.0-30.0 sec? 55.3 MBytes? 92.8 Mbits/sec [ ID] Interval?????? Transfer???? Bandwidth [? 3]? 0.0-30.0 sec??? 335 MBytes? 93.7 Mbits/sec ?

5.4??tcpdump?和?tcptrace

???????tcmdump?和?tcptrace?提供了一種更仔細(xì)的分析方法。先用?tcpdump?按要求捕獲數(shù)據(jù)包把結(jié)果輸出到某一文件,然后再用?tcptrace?分析其文件格式。

這個(gè)工具組合能夠提供一些難以用其它工具發(fā)現(xiàn)的信息:

# /usr/sbin/tcpdump -w network.dmp tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 511942 packets captured 511942 packets received by filter 0 packets dropped by kernel ? # tcptrace network.dmp 1 arg remaining, starting with 'network.dmp' Ostermann's tcptrace -- version 6.6.7 -- Thu Nov? 4, 2004 ? 511677 packets seen, 511487 TCP packets traced elapsed wallclock time: 0:00:00.510291, 1002714 pkts/sec analyzed trace file elapsed time: 0:02:35.836372 TCP connection info: ? 1: zaber:54581 - boulder:111 (a2b)?????????????????? 6>??? 5<? (complete) ? 2: zaber:833 - boulder:32774 (c2d)?????????????????? 6>??? 5<? (complete) ? 3: zaber:pcanywherestat - 172.16.39.5:53086 (e2f)??? 2>??? 3< ? 4: zaber:716 - boulder:2049 (g2h)????????????????? 347>? 257< ? 5: 172.16.39.100:58029 - zaber:12865 (i2j)?????????? 7>??? 5<? (complete) ? 6: 172.16.39.100:47592 - zaber:36814 (k2l)??????? 255380> 255378<? (reset) ? 7: breakpoint:45510 - zaber:7012 (m2n)?????????????? 9>??? 5<? (complete) ? 8: zaber:35813 - boulder:111 (o2p)?????????????????? 6>??? 5<? (complete) ? 9: zaber:837 - boulder:32774 (q2r)?????????????????? 6>??? 5<? (complete) 10: breakpoint:45511 - zaber:7012 (s2t)?????????????? 9>??? 5<? (complete) 11: zaber:59362 - boulder:111 (u2v)?????????????????? 6>??? 5<? (complete) 12: zaber:841 - boulder:32774 (w2x)???????????? ??????6>??? 5<? (complete) 13: breakpoint:45512 - zaber:7012 (y2z)?????????????? 9>??? 5<? (complete)

???????tcptrace?功能非常強(qiáng)大,還能夠通過(guò)過(guò)濾和布爾表達(dá)式來(lái)找出有問(wèn)題的連接,比方,找出轉(zhuǎn)播大于100 segments?的連接:

# tcptrace -f'rexmit_segs>100' network.dmp

假設(shè)發(fā)現(xiàn)連接?#10?有問(wèn)題,能夠查看關(guān)于這個(gè)連接的其它信息:

# tcptrace -o10 network.dmp

以下的命令使用?tcptrace?的?slice?模式。程序自己主動(dòng)在當(dāng)前文件夾創(chuàng)建了一個(gè)?slice.dat?文件,這個(gè)文件包括了每隔15秒的轉(zhuǎn)播信息:

# tcptrace -xslice network.dmp ? # cat slice.dat date??????????????? segs??? bytes? rexsegs rexbytes????? new?? active --------------- -------- -------- -------- -------- -------- -------- 16:58:50.244708??? 85055? 4513418??????? 0??????? 0??????? 6??????? 6 16:59:05.244708?? 110921? 5882896??????? 0??????? 0??????? 0??????? 2 16:59:20.244708?? 126107? 6697827??????? 0??????? 0??????? 1??????? 3 16:59:35.244708?? 151719? 8043597??????? 0??????? 0??????? 0??????? 2 16:59:50.244708??? 37296? 1980557??????? 0??????? 0??????? 0??????? 3 17:00:05.244708?????? 67???? 8828??????? 0??????? 0??????? 2??????? 3 17:00:20.244708????? 149??? 22053??????? 0??????? 0??????? 1??????? 2 17:00:35.244708?????? 30???? 4080??????? 0??????? 0??????? 0??????? 1 17:00:50.244708?????? 39???? 5688??????? 0??????? 0??????? 0??????? 1 17:01:05.244708?????? 67???? 8828??????? 0??????? 0??????? 2??????? 3 17:01:11.081080?????? 37???? 4121??????? 0??? ????0??????? 1??????? 3

總結(jié)

以上是生活随笔為你收集整理的linux下性能监控工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。