kubernets之存活探針
最近伺服器反映很慢,檢視伺服器上的應用程式經常出現超時等等,而且還有時候出現卡死的情況,經過發現伺服器I/O壓力很大,壓力來自硬碟的I/O訪問已經達到100%。
最後原因是線上業務程式碼同一時間寫入導致伺服器硬碟I/O爆表了,我這裡紀錄一下為了方便各位和自己今後遇到此類問題能儘快解決。
使用 top 命令來看一下 實時檢視系統狀態資訊:
CPU狀態(CPU s): 使用者程序佔用比率、系統程序佔用比率、使用者的nice 優先順序程序佔用比率及空閒CPU資源比率等;
記憶體狀態 (Mem): 記憶體總量、使用量、空閒量等;
交換分割槽狀態( Swap):交換分割槽總量、使用量、空閒量等;
其中CPU狀態下的引數說明 :
us:使用者態使用的CPU時間比
sy:系統態使用的CPU時間比
ni: 用做nice加權的程序分配的使用者態CPU時間比
id:空閒的CPU時間比
wa:CPU等待磁碟寫入完成時間
hi:硬中斷消耗時間
si:軟中斷消耗時間
st:虛擬機器偷取時間
可以看到伺服器的wa(71.1%)特別高,IO等待所佔用的CPU時間的百分比,高過30%時IO壓力高,說明是磁碟IO有問題。
我們使用 iostat 等命令繼續進行詳細分析,如果伺服器上沒有 iostat 要進行安裝如下:
[root@Mike-VM-Node-172_31_225_214 ~]# yum install sysstat [root@Mike-VM-Node-172_31_225_214 ~]# iostat Linux 3.10.0-514.26.2.el7.x86_64 (Mike-VM-Node172_31_225_214.com) 11/03/2020 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.14 0.00 0.04 0.01 0.00 99.81 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.44 1.38 4.59 1786837 5940236 [root@Mike-VM-Node-172_31_225_214 ~]#
引數說明:
%user:CPU處在使用者模式下的時間百分比
%nice:CPU處在帶NICE值的使用者模式下的時間百分比
%system:CPU處在系統模式下的時間百分比
%iowait:CPU等待輸入輸出完成時間的百分比
%steal:管理程式維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比
%idle:CPU空閒時間百分比
tps:該裝置每秒的傳輸次數,“一次傳輸"意思是"一次I/O請求”。多個邏輯請求可能會被合併為"一次I/O請求"。"一次傳輸"請求的大小是未知的
kB_read/s:每秒從裝置讀取的資料量
kB_wrtn/s:每秒向裝置寫入的資料量
kB_read:讀取的總資料量
kB_wrtn:寫入的總數量資料量;這些單位都為Kilobytes
使用 iostat -x 1 10 命令檢視一下IO狀態。
[root@Mike-VM-Node-172_31_225_214 ~]# iostat -x 1 10 Linux 3.10.0-514.26.2.el7.x86_64 (Mike-VM-Node172_31_225_214.com) 11/03/2020 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.13 0.00 0.04 97.01 0.00 99.82 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.10 0.06 0.33 1.07 4.42 28.07 0.00 10.94 22.13 8.83 0.35 0.01 avg-cpu: %user %nice %system %iowait %steal %idle 1.00 0.00 4.00 95.00 0.00 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.00 0.00 2140.00 0.00 8560.00 8.00 19.87 9.29 0.00 9.29 0.47 100.00
可以檢視 %util 100.00 %idle 99.82。
%util的值一直在增加,磁碟的利用率越來越高,說明對io操作越來越頻繁,對磁碟資源的使用越來越多,這與增加對於io操作的執行緒是一致的。
如果 %util 已經 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁碟可能存在瓶頸。
idle大於99% IO壓力已經到很極限,一般讀取速度有較多的wait。
引數說明:
rrqm/s: 每秒進行 merge 的讀運算元目。即 rmerge/s
wrqm/s: 每秒進行 merge 的寫運算元目。即 wmerge/s
r/s: 每秒完成的讀 I/O 裝置次數。即 rio/s
w/s: 每秒完成的寫 I/O 裝置次數。即 wio/s
rkB/s: 每秒讀K位元組數。是 rsect/s 的一半,因為每扇區大小為512位元組
wkB/s: 每秒寫K位元組數。是 wsect/s 的一半
avgrq-sz: 平均每次裝置I/O操作的資料大小 (扇區)
avgqu-sz: 平均I/O佇列長度
rsec/s: 每秒讀扇區數。即 rsect/s
wsec/s: 每秒寫扇區數。即 wsect/s
r_await:每個讀操作平均所需的時間,不僅包括硬碟裝置讀操作的時間,還包括了在kernel佇列中等待的時間
w_await:每個寫操作平均所需的時間,不僅包括硬碟裝置寫操作的時間,還包括了在kernel佇列中等待的時間
await: 平均每次裝置I/O操作的等待時間 (毫秒)
svctm: 平均每次裝置I/O操作的服務時間 (毫秒)
%util: 一秒中有百分之多少的時間用於 I/O 操作,即被io消耗的cpu百分比
如果你想對硬碟做一個IO負荷壓力測試可以用 fio 命令,如果伺服器上沒有 fio 要進行安裝如下:
[root@Mike-VM-Node-172_31_225_214 ~]# yum install -y fio
下面這命令將在指定目錄下,生成30個1G檔案,是多執行緒併發執行的:
[root@Mike-VM-Node-172_31_225_214 /tmp]# fio -directory=/tmp/ -name=readtest -direct=1-iodepth1-thread -rw=write -ioengine=psync -bs=4k -size=1G -numjobs=30-runtime=3-group_reporting
numjobs=30 表示30個併發。
-rw=可供選擇的有read單測讀write單測寫rw讀寫同時測randrw隨機讀寫同時測randread單測隨機讀randwrite單測隨機寫。
-runtime=單位是秒,表示測試的總時長。
如果你
①從事功能測試,想進階自動化測試
②在測試界混了1、2年,依然不會敲程式碼
③面試大廠卻屢屢碰壁
我邀你進群吧!來吧~~測試員,313782132(Q群裡有技術大牛一起交流分享,學習資源的價值取決於你的行動,莫做“收藏家”)獲取更多大廠技術、面試資料