如何在Linux系統(tǒng)中進(jìn)行CPU、內(nèi)存、磁盤和網(wǎng)卡的性能測試?
1. CPU性能測試
模擬對CPU加壓
接下來使用dd命令不停的消耗CPU資源(可以類比一個車不斷的空踩油門)
連續(xù)執(zhí)行兩次:
dd if=/dev/zero of=/dev/null & dd if=/dev/zero of=/dev/null &
執(zhí)行top命令,再按c按鍵可以查看具體的命令:
jobs [1]- 運行中 dd if=/dev/zero of=/dev/null & [2]+ 運行中 dd if=/dev/zero of=/dev/null & kill %1 [1]- 已終止 dd if=/dev/zero of=/dev/null kill %2 [2]+ 已終止 dd if=/dev/zero of=/dev/null
通過上述實驗可以看到兩顆CPU跑滿,但是總的CPU還剩下95.0(id值),是因為該服務(wù)器是40核CPU,2個CPU資源被占滿,剩余38個空閑CPU資源,(38/40=0.95)
如果把CPU的任務(wù)執(zhí)行設(shè)置成先進(jìn)先出,那么執(zhí)行dd就會死機(jī)了,就好比一個廁所只有一個坑,只有等先進(jìn)去的人完事第二個人才可以進(jìn)去
假如系統(tǒng)是2核的CPU,一個dd一直執(zhí)行,系統(tǒng)其他程序還要占據(jù)一部分CPU,所以如果設(shè)置成先進(jìn)先出,第二個dd執(zhí)行就直接死機(jī)了
如果不設(shè)置先進(jìn)先出,每個任務(wù)共享CPU資源,每個任務(wù)的執(zhí)行都分配一部分CPU
寫一個腳本將dd執(zhí)行80次,因為是40核的CPU,這樣每個任務(wù)都會分一部分CPU資源,所以每個dd命令占據(jù)的CPU資源基本上是50%左右,而剩余CPU資源將會是0
#!/bin/bash for ((i=1; i<=80; i++)) do dd if=/dev/zero of=/dev/null & done

如果設(shè)置成先進(jìn)先出:
# chrt -f 10 dd if=/dev/zero of=/dev/null &
我的服務(wù)器是40核的,這條命令執(zhí)行39下,第40個就直接把服務(wù)器卡死,因為系統(tǒng)程序都會擠到一個CPU去運行,第一個dd不運行完,第二個就不允許進(jìn)來,所以每個dd都占著一個CPU運行。39個dd任務(wù)全占著CPU資源,系統(tǒng)運行還需要一些CPU資源,所以再次執(zhí)行第40個dd,會直接將系統(tǒng)干崩潰。
使用iostat工具查看CPU使用情況:
yum install -y sysstat-10.1.5-19.el7.x86_64
iostat
Linux 3.10.0-1160.el7.x86_64 (worker1) 05/28/2022 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.20 0.00 0.79 0.01 0.00 98.00
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.68 0.03 8.92 219540 61027516
%user:用戶級CPU使用率,也就是上層應(yīng)用程序的CPU使用率
%nice:nice命令是調(diào)優(yōu)先級的, nice -15 command 調(diào)優(yōu)先級,調(diào)用了nice cpu就需要重新計算
%system:系統(tǒng)內(nèi)核CPU資源消耗
%iowait:磁盤消耗,IO的等待時間
%steal:這個數(shù)值和虛擬化有關(guān),如果在虛擬機(jī)中使用dd命令(后面有操作)則這個值就會增大,但是vmware的虛擬機(jī)是看不到的,需要使用KVM的虛擬機(jī),我使用金山云、騰訊云主機(jī)測試也沒效果
%idle:CPU空閑率
tps:每秒鐘處理的請求數(shù)(每秒處理的IO數(shù)目),可以把kB_read+ kB_wrtn加一起除以tps值,就可以算出block的大小
2. 內(nèi)存性能測試
free -m
total used free shared buff/cache available
Mem: 128411 3869 123826 9 715 124001
Swap: 16383 0 16383
shared:共享內(nèi)存(shared)是19M,也就是多個程序占用的共享內(nèi)存16M
buff/cache:緩存,buff是inode,cache是block,緩存作用:當(dāng)讀取一個數(shù)據(jù)時,系統(tǒng)會從硬盤中將數(shù)據(jù)讀到內(nèi)存中,讀完后并不會立即釋放該內(nèi)存,如果內(nèi)存不緊張,一直不釋放,除非內(nèi)存緊張。這部分內(nèi)存可以被當(dāng)作緩存來使用,加速緩存來操作
sysctl -w vm.drop_caches=3
丟棄緩存,當(dāng)然buff/cache這個數(shù)值不能為清為0,因為有些正在被讀取的數(shù)據(jù)可能正在使用,1是清理buff,2 是清理cache,3是buff和cache都清理。
swap:虛擬內(nèi)存,如果沒有swap分區(qū),那么可能發(fā)生內(nèi)存溢出,swap是虛擬內(nèi)存,實際上是從硬盤出分出一塊分區(qū)(內(nèi)存置換就是使用這塊分區(qū))
time cp -r /var/ /tmp real 0m1.464s user 0m0.030s sys 0m0.650s
cp的時候就把數(shù)據(jù)緩存到內(nèi)存中了,再執(zhí)行就更快了,因為不再從硬盤讀了,直接從緩存讀了
time cp -r /var/ /data real 0m1.284s user 0m0.022s sys 0m0.616s
所以當(dāng)內(nèi)存資源不緊張時,可以一直留著緩存,增加讀性能。
但是為了測試其他數(shù)據(jù)的準(zhǔn)確性,最好執(zhí)行sysctl -w vm.drop_caches=3,這樣更能體現(xiàn)測試的準(zhǔn)確性,不讓數(shù)據(jù)直接從緩存讀取。
問:如果內(nèi)存不足,有新的程序又要申請內(nèi)存,緩存會自動釋放了嗎?
答:會自動釋放了,到時候是讓新的程序使用swap分區(qū)還是讓緩存釋放來給新的程序使用,是有參數(shù)控制的,見后的講解
問:如何查看一個進(jìn)程使用多少內(nèi)存?
ps aux | grep vsftp root 3059 0.0 0.0 53292 696 ? Ss 2月01 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf 696也就是ps aux中RSS列的值
服務(wù)器可使用的最大內(nèi)存頻率:
背景:由于某線上存儲運行平臺的服務(wù)器內(nèi)存為2400MHz,現(xiàn)計劃擴(kuò)容該存儲集群,但得到廠商的反饋是擴(kuò)容的服務(wù)器必須要和原服務(wù)器的內(nèi)存頻率保持一致,但是手里頭有一些利舊服務(wù)器,不想再去迎合廠商的需求采購新的服務(wù)器,又不想去單獨采購2400MHz的內(nèi)存條插到服務(wù)器上,接下來開始調(diào)試之旅吧~~~
內(nèi)存的頻率顯示是和CPU型號緊密相關(guān)的
服務(wù)器1的CPU型號是:Intel® Xeon® Gold 5218 CPU @ 2.30GHz
- 如果插入如下3200頻率的內(nèi)存,那么在服務(wù)器的的管理界面查看到的內(nèi)存頻率將為2666MHz

- 如果插入如下3200頻率的內(nèi)存,那么在服務(wù)器的的管理界面查看到的內(nèi)存頻率將為2666MHz
服務(wù)器管理界面顯示如下:
該CPU型號并不能完全的使用到3200MHz,即該CPU最大識別到2666MHz
如果插入如下2933MHz的內(nèi)存,那么在服務(wù)器的的管理界面查看到的內(nèi)存頻率同樣為2666MHz

服務(wù)器2的CPU型號是:Intel® Xeon® Silver 4214 CPU @ 2.20GHz
- 如果插入如下2933MHz的內(nèi)存,那么在服務(wù)器的的管理界面查看到的內(nèi)存頻率為2400MHz

- 如果插入如下2933MHz的內(nèi)存,那么在服務(wù)器的的管理界面查看到的內(nèi)存頻率為2400MHz
其實到此需求已經(jīng)有解決辦法了,那就是把服務(wù)器2的內(nèi)存都插上2933MHz的內(nèi)存條就行了,但是服務(wù)器2的臺數(shù)不夠,擴(kuò)容需求中至少需要4臺,而我只有3臺,但是服務(wù)器1總共有4臺,哎~~
只能跟領(lǐng)導(dǎo)申請買內(nèi)存條,用最少的錢解決問題,服務(wù)器1總計有4臺,而每臺服務(wù)器有兩顆CPU,所以每臺服務(wù)器至少需要2條2400MHz的內(nèi)存(即每個CPU控制的內(nèi)存都插1條,A1插一條2400MHz的,B1插一條2400MHz的內(nèi)存條)
CPU控制的內(nèi)存頻率中,如果有一條頻率較低,其他內(nèi)存條的頻率會降頻和最低的頻率保持對其,所以每個CPU處只需要插一條2400MHz的內(nèi)存,其他的內(nèi)存條頻率無論怎么高,也得跟這個2400MHz的保持對其
綜上的分析也就是我只需要買8條2400MHz的內(nèi)存條即可解決問題(其余無論該服務(wù)器插多少根內(nèi)存條,那么所有內(nèi)存的頻率在服務(wù)器管理界面都將顯示2400MHz)
可能遇到的問題:
總計4臺服務(wù)器中的3臺這么操作之后都是顯示2400MHz,其中1臺還是顯示2666MHz,聯(lián)系戴爾售后反饋需要更新iDRAC固件版本( 3.36.36.36),需要戴爾售后工程師操作。
更換完內(nèi)存條在之后,需要重設(shè)iDRAC,重設(shè)之后將強(qiáng)制退出管理界面,需要過幾分鐘再登錄。

總結(jié):內(nèi)存頻率和CPU型號息息相關(guān),但是也不是按照內(nèi)存的最大頻率(內(nèi)存條標(biāo)注的頻率)使用,具體按照哪個內(nèi)存頻率使用,需要具體看CPU的型號。低頻內(nèi)存條需要兩顆CPU處至少各插一條(A1、B1)才能降頻。
當(dāng)然也可以去網(wǎng)絡(luò)查找相關(guān)CPU支持的內(nèi)存頻率:
Intel® Xeon® Gold 5218 Processor 22M Cache, 2.30 GHz:
Intel® Xeon® Silver 4214 Processor16.5M Cache, 2.20 GHz詳細(xì)參數(shù):
3. 磁盤性能測試
3.1. dd工具
dd if=/dev/zero of=test1 bs=8k count=102400 oflag=direct &
不寫oflag=direct會把數(shù)據(jù)直接寫到內(nèi)存,所以加這個參數(shù)后數(shù)據(jù)直接寫到硬盤,更能測試出硬盤的性能(省去了內(nèi)存和硬盤數(shù)據(jù)資源整合的過程)
block塊大小設(shè)置為8k: # dd if=/dev/zero of=test1 bs=8k count=102400 oflag=direct 102400+0 records in 102400+0 records out 838860800 bytes (839 MB) copied, 12.1258 s, 69.2 MB/s block塊大小設(shè)置為4K: # dd if=/dev/zero of=test1 bs=4k count=102400 oflag=direct 102400+0 records in 102400+0 records out 419430400 bytes (419 MB) copied, 12.3598 s, 33.9 MB/s
同樣是800M大小數(shù)據(jù),塊大小設(shè)置的不一樣,寫的速率也不一樣
3.2. fio工具
yum install -y fio
測試案例:
協(xié)商測試條件 :64KB 隨機(jī)100% 讀70%寫30% IO深度16 :
實際會生成一個這個文件/wangzy_demo73.file
# fio -filename=/data/wangzy_demo73.file -direct=1 -iodepth 16 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=64k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k 輸出: fio-3.7 Starting 50 threads randrw_70read_4k: Laying out IO file (1 file / 10240MiB) Jobs: 50 (f=50): [m(50)][100.0%][r=241MiB/s,w=102MiB/s][r=3856,w=1628 IOPS][eta 00m:00s] randrw_70read_4k: (groupid=0, jobs=50): err= 0: pid=17888: Mon Nov 8 05:35:12 2021 read: IOPS=3990, BW=249MiB/s (262MB/s)(43.9GiB/180062msec) clat (usec): min=246, max=176467, avg=7023.24, stdev=8212.76 lat (usec): min=246, max=176468, avg=7023.62, stdev=8212.77 clat percentiles (usec): | 1.00th=[ 1500], 5.00th=[ 1909], 10.00th=[ 2212], 20.00th=[ 2704], | 30.00th=[ 3130], 40.00th=[ 3589], 50.00th=[ 4113], 60.00th=[ 4817], | 70.00th=[ 6259], 80.00th=[ 10814], 90.00th=[ 14615], 95.00th=[ 19006], | 99.00th=[ 46924], 99.50th=[ 58983], 99.90th=[ 81265], 99.95th=[ 88605], | 99.99th=[115868] bw ( KiB/s): min= 896, max=18688, per=2.00%, avg=5109.15, stdev=1532.54, samples=17989 iops : min= 14, max= 292, avg=79.79, stdev=23.95, samples=17989 write: IOPS=1712, BW=107MiB/s (112MB/s)(18.8GiB/180062msec) clat (usec): min=343, max=116561, avg=12794.22, stdev=4158.95 lat (usec): min=344, max=116566, avg=12798.81, stdev=4158.98 clat percentiles (usec): | 1.00th=[ 5997], 5.00th=[ 7701], 10.00th=[ 8717], 20.00th=[ 9765], | 30.00th=[10552], 40.00th=[11207], 50.00th=[11994], 60.00th=[12780], | 70.00th=[13829], 80.00th=[15533], 90.00th=[18220], 95.00th=[20579], | 99.00th=[25822], 99.50th=[28443], 99.90th=[35390], 99.95th=[38011], | 99.99th=[48497] bw ( KiB/s): min= 256, max= 8448, per=2.00%, avg=2192.45, stdev=690.87, samples=17989 iops : min= 4, max= 132, avg=34.21, stdev=10.79, samples=17989 lat (usec) : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01% lat (msec) : 2=4.42%, 4=29.22%, 10=27.73%, 20=33.82%, 50=4.17% lat (msec) : 100=0.58%, 250=0.02% cpu : usr=0.10%, sys=0.30%, ctx=1029009, majf=0, minf=2354 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwts: total=718594,308385,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=16 Run status group 0 (all jobs): READ: bw=249MiB/s (262MB/s), 249MiB/s-249MiB/s (262MB/s-262MB/s), io=43.9GiB (47.1GB), run=180062-180062msec WRITE: bw=107MiB/s (112MB/s), 107MiB/s-107MiB/s (112MB/s-112MB/s), io=18.8GiB (20.2GB), run=180062-180062msec
測試場景:
- 100%隨機(jī),100%讀, 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
- 100%隨機(jī),100%寫, 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
- 100%順序,100%讀 ,4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
- 100%順序,100%寫 ,4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
- 100%隨機(jī),70%讀,30%寫 4K
fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k
參數(shù)說明:
- 輸入?yún)?shù):
filename=/dev/emcpowerb 支持文件系統(tǒng)或者裸設(shè)備,-filename=/dev/sda2或-filename=/dev/sdb direct=1 測試過程繞過機(jī)器自帶的buffer,使測試結(jié)果更真實 rw=randwread 測試隨機(jī)讀的I/O rw=randwrite 測試隨機(jī)寫的I/O rw=randrw 測試隨機(jī)混合寫和讀的I/O rw=read 測試順序讀的I/O rw=write 測試順序?qū)懙腎/O rw=rw 測試順序混合寫和讀的I/O bs=4k 單次io的塊文件大小為4k bsrange=512-2048 同上,提定數(shù)據(jù)塊的大小范圍 size=5g 本次的測試文件大小為5g,以每次4k的io進(jìn)行測試 numjobs=30 本次的測試線程為30 runtime=1000 測試時間為1000秒,如果不寫則一直將5g文件分4k每次寫完為止 ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包 rwmixwrite=30 在混合讀寫的模式下,寫占30% group_reporting 關(guān)于顯示結(jié)果的,匯總每個進(jìn)程的信息 此外 lockmem=1g 只使用1g內(nèi)存進(jìn)行測試 zero_buffers 用0初始化系統(tǒng)buffer nrfiles=8 每個進(jìn)程生成文件的數(shù)量
- 輸出參數(shù):
io=執(zhí)行了多少M的IO bw=平均IO帶寬 iops=IOPS runt=線程運行時間 slat=提交延遲 clat=完成延遲 lat=響應(yīng)時間 bw=帶寬 cpu=利用率 IO depths=io隊列 IO submit=單個IO提交要提交的IO數(shù) IO complete=Like the above submit number, but for completions instead. IO issued=The number of read/write requests issued, and how many of them were short. IO latencies=IO完延遲的分布 io=總共執(zhí)行了多少size的IO aggrb=group總帶寬 minb=最小.平均帶寬. maxb=最大平均帶寬. mint=group中線程的最短運行時間. maxt=group中線程的最長運行時間. ios=所有g(shù)roup總共執(zhí)行的IO數(shù). merge=總共發(fā)生的IO合并數(shù). ticks=Number of ticks we kept the disk busy. io_queue=花費在隊列上的總共時間. util=磁盤利用率
以64KB為一個單位 ,3990就是1秒進(jìn)行3990次64KB的寫入,3390x64/1000
1MB = 1000KB
1MiB = 1024KiB
3.3. iostat工具
iostat -d 1 5 -d(disk)僅查看磁盤,1秒顯示一次,總計顯示5次 Linux 3.10.0-1160.el7.x86_64 (worker1) 05/28/2022 _x86_64_ (4 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.68 0.03 8.92 219540 61028412 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.00 0.00 0.00 0 0 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.00 0.00 0.00 0 0 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 1.00 0.00 12.00 0 12 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.00 0.00 0.00 0 0
iostat –x 顯示更加詳細(xì)的信息
iostat -c 1 5 -c是僅查看CPU,1秒顯示一次,總計顯示5次
iostat只能顯示開機(jī)到現(xiàn)在的數(shù)據(jù),要么就顯示當(dāng)下的數(shù)據(jù)狀態(tài), iostat不能查看昨天的歷史數(shù)據(jù),但是sar可以
使用sar工具查看磁盤IO情況:
sar -d 1 10 -d表示硬盤

sar -p -d 1 10 -p 可以顯示設(shè)備本身

4. 存儲性能測試

案例說明:
描述問題:某IPTV局點客戶反饋,偶爾出現(xiàn)黑屏情況。
分析原因:系統(tǒng)狀態(tài)正常,LUN運行策略為回寫鏡像,鏈路正常、無誤碼、無閃斷。使用iostat -x 1觀察,發(fā)現(xiàn)在業(yè)務(wù)量大時,有一個盤的服務(wù)時間(svctm)明顯比其他盤高很多,超過50ms,判定該盤為慢盤。
解決步驟:將該硬盤離線,并更換該硬盤
驗證恢復(fù):更換硬盤后,沒有再出現(xiàn)黑屏現(xiàn)象
5. 網(wǎng)卡性能測試
主要測試網(wǎng)卡承載的流量以及網(wǎng)卡的實時流量
5.1. sar工具
yum install -y sysstat
sar -n DEV 5 1 # 每5秒鐘取1次值,取1次
DEV顯示網(wǎng)絡(luò)接口信息,-n參數(shù)后面還可以接6個不同的開關(guān):DEV | EDEV | NFS | NFSD | SOCK | ALL ,其代表的含義如下:
● DEV顯示網(wǎng)絡(luò)接口信息。
● EDEV顯示關(guān)于網(wǎng)絡(luò)錯誤的統(tǒng)計數(shù)據(jù)。
● NFS統(tǒng)計活動的NFS客戶端的信息。
● NFSD統(tǒng)計NFS服務(wù)器的信息
● SOCK顯示套接字信息
● ALL顯示所有5個開關(guān)

參數(shù)說明:
● IFACE:LAN接口
● rxpck/s:每秒鐘接收的數(shù)據(jù)包
● txpck/s:每秒鐘發(fā)送的數(shù)據(jù)包
● rxbyt/s:每秒鐘接收的字節(jié)數(shù)
● txbyt/s:每秒鐘發(fā)送的字節(jié)數(shù)
● rxcmp/s:每秒鐘接收的壓縮數(shù)據(jù)包
● txcmp/s:每秒鐘發(fā)送的壓縮數(shù)據(jù)包
● rxmcst/s:每秒鐘接收的多播數(shù)據(jù)包
● rxerr/s:每秒鐘接收的壞數(shù)據(jù)包
● txerr/s:每秒鐘發(fā)送的壞數(shù)據(jù)包
● coll/s:每秒沖突數(shù)
● rxdrop/s:因為緩沖充滿,每秒鐘丟棄的已接收數(shù)據(jù)包數(shù)
● txdrop/s:因為緩沖充滿,每秒鐘丟棄的已發(fā)送數(shù)據(jù)包數(shù)
● txcarr/s:發(fā)送數(shù)據(jù)包時,每秒載波錯誤數(shù)
● rxfram/s:每秒接收數(shù)據(jù)包的幀對齊錯誤數(shù)
● rxfifo/s:接收的數(shù)據(jù)包每秒FIFO過速的錯誤數(shù)
● txfifo/s:發(fā)送的數(shù)據(jù)包每秒FIFO過速的錯誤數(shù)
5.2. 腳本工具
此腳本不需要額外再安裝軟件,并且可自定義查看的接口,精確到小數(shù),可根據(jù)流量大小靈活顯示單位,默認(rèn)采集間隔為1秒
cat net.sh
#!/bin/bash
ethn=$1
while true
do
RX_pre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')
TX_pre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}')
sleep 1
RX_next=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')
TX_next=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}')
clear
echo -e "\t RX `date +%k:%M:%S` TX"
RX=$((${RX_next}-${RX_pre}))
TX=$((${TX_next}-${TX_pre}))
if [[ $RX -lt 1024 ]];then
RX="${RX}B/s"
elif [[ $RX -gt 1048576 ]];then
RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')
else
RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
fi
if [[ $TX -lt 1024 ]];then
TX="${TX}B/s"
elif [[ $TX -gt 1048576 ]];then
TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
else
TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
fi
echo -e "$ethn \t $RX $TX "
done
chmod +x net.sh sh net.sh bond1

5.3. iftop工具
iftop 可以監(jiān)控指定網(wǎng)卡的實時流量、端口連接信息、反向解析 IP 等,還可以精確顯示本機(jī)網(wǎng)絡(luò)流量及網(wǎng)絡(luò)內(nèi)各主機(jī)和本機(jī)相互通信的流量集合
通過源代碼編譯安裝:
yum install -y libpcap libpcap-devel ncurses ncurses-devel flex byacc
wget "http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz" tar zxvf iftop-0.17.tar.gz cd iftop-0.17 ./configure make && make install
安裝完iftop工具后,直接輸入iftop命令即可顯示網(wǎng)卡實時流量信息。在默認(rèn)情況下,iftop顯示系統(tǒng)第一塊網(wǎng)卡的流量信息,如果要顯示指定網(wǎng)卡信息,可通過“-i”參數(shù)實現(xiàn)
iftop -P -i bond1

- 第一部分
- iftop 輸出中最上面的一行,此行信息是流量刻度,用于顯示網(wǎng)卡帶寬流量。
- 第二部分
- 此部分為分割線中間的部分,其中又分別分為左、中、右三列。左列和中列,記錄了哪些IP或主機(jī)正在和本機(jī)的網(wǎng)絡(luò)進(jìn)行連接。其中,中列的“=>”代表發(fā)送數(shù)據(jù),“<=”代表接收數(shù)據(jù),通過這個指示箭頭可以很清晰地知道兩個IP之間的通信情況。最右列又分為三小列,這些實時參數(shù)分別表示外部 IP連接到本機(jī) 2 秒內(nèi)、10 秒內(nèi)和 40 秒內(nèi)的平均流量值。
- 另外,這個部分還有一個流量圖形條,流量圖形條是對流量大小的動態(tài)展示,以第一部分中的流量刻度為基準(zhǔn)。通過這個流量圖形條可以很方便地看出哪個IP的流量最大,進(jìn)而迅速定位網(wǎng)絡(luò)中可能出現(xiàn)的流量問題。
- 第三部分
- 位于iftop輸出的最下面,可以分為三行,其中,“TX”表示發(fā)送數(shù)據(jù),“RX”表示接收數(shù)據(jù),“TOTAL”表示發(fā)送和接收全部流量。與這三行對應(yīng)的有三列,其中“cumm”列表示從運行 iftop 到目前的發(fā)送、接收和總數(shù)據(jù)流量。“peak”列表示發(fā)送、接收以及總的流量峰值。“rates”列表示過去 2s、10s、40s 的平均流量值。
交互操作:
在iftop的實時監(jiān)控界面中,還可以對輸出結(jié)果進(jìn)行交互式操作,用于對輸出信息進(jìn)行整理和過濾,在上圖所示界面中,按鍵 “h” 即可進(jìn)入交互選項界面,iftop 的交互功能和 Linux 下的top命令非常類似,交互參數(shù)主要分為4個部分,分別是一般參數(shù)、主機(jī)顯示參數(shù)、端口顯示參數(shù)和輸出排序參數(shù)。相關(guān)參數(shù)的含義如下表所示:
參數(shù) 含義 P 通過此鍵可切換暫停/繼續(xù)顯示 h 通過此鍵可在交互參數(shù)界面/狀態(tài)輸出界面之間來回切換 b 通過此鍵可切換是否顯示平均流量圖形條 B 通過此鍵可切換顯示2秒、10秒、40秒內(nèi)的平均流量 T 通過此鍵可切換是否顯示每個連接的總流量 j/k 按j鍵或k鍵可以向上或向下滾動屏幕顯示當(dāng)前的連接信息 l 通過此鍵可打開iftop輸出過濾功能,比如輸入要顯示的IP,按回車后,屏幕就只顯示與這個IP相關(guān)的流量信息 L 通過此鍵可切換顯示流量刻度范圍,刻度不同,流量圖形條會跟著變化 q 通過此鍵可退出iftop流量監(jiān)控界面 n 通過此鍵可使iftop輸出結(jié)果以IP或主機(jī)名的方式顯示 s 通過此鍵可切換是否顯示源主機(jī)信息 d 通過此鍵可切換是否顯示遠(yuǎn)端目標(biāo)主機(jī)信息 t 通過此鍵可切換iftop顯示格式,連續(xù)按此鍵可依次顯示:以兩行顯示發(fā)送接收流量、以一行顯示發(fā)送接收流量、只顯示發(fā)送流量/接收流量 N 通過此鍵可切換顯示端口號/端口號對應(yīng)服務(wù)名稱 S 通過此鍵可切換是否顯示本地源主機(jī)的端口信息 D 通過此鍵可切換是否顯示遠(yuǎn)端目標(biāo)主機(jī)的端口信息 p 通過此鍵可切換是否顯示端口信息 1/2/3 根據(jù)最近 2 秒、10 秒、40 秒的平均網(wǎng)絡(luò)流量排序 < 通過此鍵可根據(jù)左邊的本地主機(jī)名或IP地址進(jìn)行排序 > 通過此鍵可根據(jù)遠(yuǎn)端目標(biāo)主機(jī)的主機(jī)名或IP地址進(jìn)行排序 o 通過此鍵可切換是否固定顯示當(dāng)前的連接
使用示例:
- 顯示網(wǎng)卡 eth0 的信息,主機(jī)通過 ip 顯示
iftop -i bond1 -n
- 顯示端口號(添加 -P 參數(shù),進(jìn)入界面可通過 p 參數(shù)關(guān)閉)
iftop -i bond1 -n -P
- 顯示將輸出以 byte 為單位顯示網(wǎng)卡流量,默認(rèn)是 bit
iftop -i bond1 -n -B
- 顯示流量進(jìn)度條
iftop -i bond1 -n # 進(jìn)入界面后按下shift+l
- 顯示每個連接的總流量
iftop -i bond1 -n # 進(jìn)入界面后按下shift+t
- 顯示指定 ip 172.17.1.158 的流量
iftop -i bond1 -n # 進(jìn)入界面后按下 l 后,再輸入172.17.1.158并回車
實戰(zhàn):
下面將通過找出最費流量的IP和端口號實例來綜合講解iftop
進(jìn)入界面:
iftop -i bond1 -nNB -m 10M -i 指定網(wǎng)卡, -n 代表主機(jī)通過ip顯示不走DNS -N 只顯示連接端口號,不顯示端口對應(yīng)的服務(wù)名稱(不加會顯示如ssh這樣的服務(wù)名稱,不便于排查) -B 指定顯示單位為Kb,默認(rèn)是bit,太?。? -m 設(shè)置輸出界面中最上面的流量刻度最大值,流量刻度分5個大段顯示
進(jìn)入后界面如下:
按下shift+l顯示流量刻度(L 參數(shù)直接顯示進(jìn)度條,方便閱讀):
按下shift+t顯示總量,總數(shù)統(tǒng)計:
按下 3,根據(jù)最近 40s 統(tǒng)計排序,用平均值來統(tǒng)計最權(quán)威:
按下 t,流量發(fā)送和流量接收合成一行:
多按幾次 shift+b,查看最近 2s、10s、40s的統(tǒng)計:
根據(jù)流量進(jìn)度條找出圖中流量用得最多的 IP(當(dāng)然我這個是壓測儀打的流量,所以每個IP都很高),假定172.26.3.30是流量最高的,篩選指定 IP:172.26.3.30
按下 shift+l, 輸入172.26.3.30,出現(xiàn)如下:
按回車:
這樣就只看到這個 IP 的流量監(jiān)控了。找到這個IP哪個端口流量用得最多
按下 p根據(jù)端口號顯示(我這個服務(wù)器沒有任何端口流量,使用壓測儀往網(wǎng)卡打的流量)
到此這篇關(guān)于如何在Linux系統(tǒng)中進(jìn)行CPU、內(nèi)存、磁盤和網(wǎng)卡的性能測試?的文章就介紹到這了,更多相關(guān)Linux硬件性能調(diào)優(yōu)測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
htaccess 將所有請求重定向到某個URL地址的規(guī)則
htaccess 將所有請求重定向到某個URL地址的規(guī)則,需要的朋友可以參考下。2011-04-04
linux之如何查看進(jìn)程占用網(wǎng)速和流量使用情況
這篇文章主要介紹了linux之如何查看進(jìn)程占用網(wǎng)速和流量使用情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
Apache?POI操作批量導(dǎo)入MySQL數(shù)據(jù)庫
本文主要介紹了Apache?POI操作批量導(dǎo)入MySQL數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
CentOS 7.x安裝部署Memcached服務(wù)器的詳細(xì)方法
這篇文章主要介紹了CentOS 7.x安裝部署Memcached服務(wù)器的詳細(xì)步驟,需要的朋友可以參考下2018-01-01

