首先 、用top命令查看
創(chuàng)新互聯(lián)公司主營興隆網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),興隆h5重慶小程序開發(fā)公司搭建,興隆網(wǎng)站營銷推廣歡迎興隆等地區(qū)企業(yè)咨詢
top - 16:15:05 up 6 days, ?6:25, ?2 users, ?load average: 1.45, 1.77, 2.14
Tasks: 147 total, ? 1 running, 146 sleeping, ? 0 stopped, ? 0 zombie
Cpu(s): ?0.2% us, ?0.2% sy, ?0.0% ni, 86.9% id, 12.6% wa, ?0.0% hi, ?0.0% si
Mem: ? 4037872k total, ?4003648k used, ? ?34224k free, ? ? 5512k buffers
Swap: ?7164948k total, ? 629192k used, ?6535756k free, ?3511184k cached
查看12.6% wa
IO等待所占用的CPU時(shí)間的百分比,高過30%時(shí)IO壓力高
其次、 用iostat -x 1 10
avg-cpu: ?%user ? %nice ? ?%sys %iowait ? %idle
0.00 ? ? ? 0.00 ? ? 0.25 ? ?33.46 ? ?66.29
Device: ? ?rrqm/s ?wrqm/s ? r/s ? ?w/s ? ? rsec/s ? wsec/s ? ?rkB/s ? ?wkB/s avgrq-sz avgqu-sz ? await ?svctm ?%util
sda ? ? ? ? ?0.00 ? ?0.00 ? ? ?0.00 ? 0.00 ? ?0.00 ? ?0.00 ? ? ? ? 0.00 ? ? 0.00 ? ? 0.00 ? ? ? ? ? 0.00 ? ?0.00 ? ?0.00 ? 0.00
sdb ? ? ? ? ?0.00 ? 1122 ?17.00 ?9.00 ?192.00 9216.00 ? ?96.00 ?4608.00 ? 123.79 ? 137.23 1033.43 ?13.17 100.10
sdc ? ? ? ? ?0.00 ? ?0.00 ? ? 0.00 ? 0.00 ? ? 0.00 ? ? 0.00 ? ? ?0.00 ? ? 0.00 ? ? 0.00 ? ? ? ? ? ? 0.00 ? ?0.00 ? ? ?0.00 ? 0.00
查看%util 100.10 %idle 66.29
如果 %util 接近 100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷,該磁盤可能存在瓶頸。
idle小于70% IO壓力就較大了,一般讀取速度有較多的wait.
同時(shí)可以結(jié)合vmstat 查看查看b參數(shù)(等待資源的進(jìn)程數(shù))
vmstat -1
如果你想對硬盤做一個(gè)IO負(fù)荷的壓力測試可以用如下命令
time dd if=/dev/zero bs=1M count=2048 of=direct_2G
此命令為在當(dāng)前目錄下新建一個(gè)2G的文件
我們在新建文件夾的同時(shí)來測試IO的負(fù)荷情況。
linux查看磁盤io的幾種方法
怎樣才能快速的定位到并發(fā)高是由于磁盤io開銷大呢?可以通過三種方式:
第一種:用 top 命令 中的cpu 信息觀察
Top可以看到的cpu信息有:
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
具體的解釋如下:
Tasks: 29 total 進(jìn)程總數(shù)
1 running 正在運(yùn)行的進(jìn)程數(shù)
28 sleeping 睡眠的進(jìn)程數(shù)
0 stopped 停止的進(jìn)程數(shù)
0 zombie 僵尸進(jìn)程數(shù)
Cpu(s):
0.3% us 用戶空間占用CPU百分比
1.0% sy 內(nèi)核空間占用CPU百分比
0.0% ni 用戶進(jìn)程空間內(nèi)改變過優(yōu)先級(jí)的進(jìn)程占用CPU百分比
98.7% id 空閑CPU百分比
0.0% wa 等待輸入輸出的CPU時(shí)間百分比
0.0% hi
0.0% si
0.0% wa 的百分比可以大致的體現(xiàn)出當(dāng)前的磁盤io請求是否頻繁。如果 wa的數(shù)量比較大,說明等待輸入輸出的的io比較多。
第二種:用vmstat
vmstat 命令報(bào)告關(guān)于線程、虛擬內(nèi)存、磁盤、陷阱和 CPU 活動(dòng)的統(tǒng)計(jì)信息。由 vmstat 命令生成的報(bào)告可以用于平衡系統(tǒng)負(fù)載活動(dòng)。系統(tǒng)范圍內(nèi)的這些統(tǒng)計(jì)信息(所有的處理器中)都計(jì)算出以百分比表示的平均值,或者計(jì)算其總和。
輸入命令:
vmstat 2 5
如果發(fā)現(xiàn)等待的進(jìn)程和處在非中斷睡眠狀態(tài)的進(jìn)程數(shù)非常多,并且發(fā)送到塊設(shè)備的塊數(shù)和從塊設(shè)備接收到的塊數(shù)非常大,那就說明磁盤io比較多。
vmstat參數(shù)解釋:
Procs
r: 等待運(yùn)行的進(jìn)程數(shù) b: 處在非中斷睡眠狀態(tài)的進(jìn)程數(shù) w: 被交換出去的可運(yùn)行的進(jìn)程數(shù)。此數(shù)由 linux 計(jì)算得出,但 linux 并不耗盡交換空間
Memory
swpd: 虛擬內(nèi)存使用情況,單位:KB
free: 空閑的內(nèi)存,單位KB
buff: 被用來做為緩存的內(nèi)存數(shù),單位:KB
Swap
si: 從磁盤交換到內(nèi)存的交換頁數(shù)量,單位:KB/秒
so: 從內(nèi)存交換到磁盤的交換頁數(shù)量,單位:KB/秒
IO
bi: 發(fā)送到塊設(shè)備的塊數(shù),單位:塊/秒
bo: 從塊設(shè)備接收到的塊數(shù),單位:塊/秒
System
in: 每秒的中斷數(shù),包括時(shí)鐘中斷
cs: 每秒的環(huán)境(上下文)切換次數(shù)
CPU
按 CPU 的總使用百分比來顯示
us: CPU 使用時(shí)間
sy: CPU 系統(tǒng)使用時(shí)間
id: 閑置時(shí)間
準(zhǔn)測
更多vmstat使用信息
第二種:用iostat
安裝:
Iostat 是 sysstat 工具集的一個(gè)工具,需要安裝。
Centos的安裝方式是:
yum install sysstat
Ubuntu的安裝方式是:
aptitude install sysstat
使用:
iostat -dx 顯示磁盤擴(kuò)展信息
root@fileapp:~# iostat -dx
r/s 和 w/s 分別是每秒的讀操作和寫操作,而rKB/s 和wKB/s 列以每秒千字節(jié)為單位顯示了讀和寫的數(shù)據(jù)量
如果這兩對數(shù)據(jù)值都很高的話說明磁盤io操作是很頻繁。
+++++++++++++++++++++++++++++++++++++
linux wa%過高,iostat查看io狀況
1, 安裝??iostat??
yum install sysstat
之后就可以使用?iostat 命令了,
2,入門使用
iostat -d -k 2
參數(shù) -d 表示,顯示設(shè)備(磁盤)使用狀態(tài);-k某些使用block為單位的列強(qiáng)制使用Kilobytes為單位;2表示,數(shù)據(jù)顯示每隔2秒刷新一次。
tps:該設(shè)備每秒的傳輸次數(shù)(Indicate the number of transfers per second that were issued to the device.)。"一次傳輸"意思是"一次I/O請求"。多個(gè)邏輯請求可能會(huì)被合并為"一次I/O請求"。"一次傳輸"請求的大小是未知的。kB_read/s:每秒從設(shè)備(drive expressed)讀取的數(shù)據(jù)量;
kB_wrtn/s:每秒向設(shè)備(drive expressed)寫入的數(shù)據(jù)量;
kB_read:讀取的總數(shù)據(jù)量;kB_wrtn:寫入的總數(shù)量數(shù)據(jù)量;這些單位都為Kilobytes。
指定監(jiān)控的設(shè)備名稱為sda,該命令的輸出結(jié)果和上面命令完全相同。
iostat -d sda 2
默認(rèn)監(jiān)控所有的硬盤設(shè)備,現(xiàn)在指定只監(jiān)控sda。?
3, -x 參數(shù)
iostat還有一個(gè)比較常用的選項(xiàng) -x ,該選項(xiàng)將用于顯示和io相關(guān)的擴(kuò)展數(shù)據(jù)。
iostat -d -x -k 1 10
輸出信息的含義
。
4, 常見用法
iostat -d -k 1 10? ? ? ? #查看TPS和吞吐量信息(磁盤讀寫速度單位為KB)
iostat -d -m 2? ? ? ? ? ? #查看TPS和吞吐量信息(磁盤讀寫速度單位為MB)
iostat -d -x -k 1 10? ? ? #查看設(shè)備使用率(%util)、響應(yīng)時(shí)間(await) iostat -c 1 10 #查看cpu狀態(tài)
5, 實(shí)例分析
iostat -d -k 1 | grep vda
Device:? ? ? ? ? ? tps? ? kB_read/s? ? kB_wrtn/s? ? kB_read? ? kB_wrtn
sda10? ? ? ? ? ? 60.72? ? ? ? 18.95? ? ? ? 71.53? 395637647 1493241908
sda10? ? ? ? ? 299.02? ? ? 4266.67? ? ? 129.41? ? ? 4352? ? ? ? 132
sda10? ? ? ? ? 483.84? ? ? 4589.90? ? ? 4117.17? ? ? 4544? ? ? 4076
sda10? ? ? ? ? 218.00? ? ? 3360.00? ? ? 100.00? ? ? 3360? ? ? ? 100
sda10? ? ? ? ? 546.00? ? ? 8784.00? ? ? 124.00? ? ? 8784? ? ? ? 124
sda10? ? ? ? ? 827.00? ? 13232.00? ? ? 136.00? ? ? 13232? ? ? ? 136
上面看到,磁盤每秒傳輸次數(shù)平均約400;每秒磁盤讀取約5MB,寫入約1MB。
iostat -d -x -k 1
Device:? ? rrqm/s wrqm/s? r/s? w/s? rsec/s? wsec/s? ? rkB/s? ? wkB/s avgrq-sz avgqu-sz? await? svctm? %util
sda? ? ? ? ? 1.56? 28.31? 7.84 31.50? 43.65? ? 3.16? ? 21.82? ? 1.58? ? 1.19? ? 0.03? ? 0.80? 2.61? 10.29
sda? ? ? ? ? 1.98? 24.75 419.80? 6.93 13465.35? 253.47? 6732.67? 126.73? ? 32.15? ? 2.00? ? 4.70? 2.00? 85.25
sda? ? ? ? ? 3.06? 41.84 444.90 54.08 14204.08 2048.98? 7102.04? 1024.49? ? 32.57? ? 2.10? ? 4.21? 1.85? 92.24
可以看到磁盤的平均響應(yīng)時(shí)間5ms,磁盤使用率80。磁盤響應(yīng)正常,但是已經(jīng)很繁忙了。
可以看到磁盤的平均響應(yīng)時(shí)間5ms,磁盤使用率90。磁盤響應(yīng)正常,但是已經(jīng)很繁忙了。
await:? 每一個(gè)IO請求的處理的平均時(shí)間(單位是微秒毫秒)。這里可以理解為IO的響應(yīng)時(shí)間,一般地系統(tǒng)IO響應(yīng)時(shí)間應(yīng)該低于5ms,如果大于10ms就比較大了
svctm? ? 表示平均每次設(shè)備I/O操作的服務(wù)時(shí)間(以毫秒為單位)。如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,
如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊(duì)列等待太長,? 系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?/p>
%util: 在統(tǒng)計(jì)時(shí)間內(nèi)所有處理IO時(shí)間,除以總共統(tǒng)計(jì)時(shí)間
所以該參數(shù)暗示了設(shè)備的繁忙程度
。一般地,如果該參數(shù)是100%表示設(shè)備已經(jīng)接近滿負(fù)荷運(yùn)行了(當(dāng)然如果是多磁盤,即使%util是100%,因?yàn)榇疟P的并發(fā)能力,所以磁盤使用未必就到了瓶頸)。
也可以使用下面的命令,同時(shí)顯示cpu和磁盤的使用情況
等待時(shí)間超過5ms, 磁盤io有問題
1.?用戶空間與內(nèi)核空間
2.?進(jìn)程切換
3.?進(jìn)程的阻塞
4.?文件描述符FD
5.?緩存 I/O
1. 阻塞 I/O(Blocking IO)
2.?非阻塞 I/O(NonBlocking IO)
3.?I/O 多路復(fù)用
4.?異步 I/O(Asynchronous IO)
1.?select
2. poll
3. epoll
查看linux進(jìn)程占用端口步驟如下:
lsof -i 用以顯示符合條件的進(jìn)程情況,lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開文件的工具。以root用戶來執(zhí)行l(wèi)sof -i命令,如下圖
lsof -i:端口號(hào),用于查看某一端口的占用情況,比如查看22號(hào)端口使用情況,lsof -i:22,如下圖
netstat -tunlp用于顯示tcp,udp的端口和進(jìn)程等相關(guān)情況,如下圖
netstat -tunlp|grep 端口號(hào),用于查看指定端口號(hào)的進(jìn)程情況,如查看22端口的情況,netstat -tunlp|grep 22,如下圖