系統hung住排查解決

2021-09-17 23:25:56 字數 2159 閱讀 8028

@系統hung住解決

message下報錯:

kernel: info: task jbd2/sdb1-8:966 blocked for more than 120 seconds.

kernel: 「echo 0 > /proc/sys/kernel/hung_task_timeout_secs」 disables this message.

背景:伺服器響應突然變得非常遲鈍。

收集日誌資訊來看了一下cpu 和記憶體的使用率不高

原因:這個是io問題導致的

由上面的日誌可以看到是由jbd2/sdb1-9:996 引發的問題,cd /proc/996/執行緒目錄下,

這個是ext4檔案系統的日誌程序

sdb1分割槽發生日誌啟用功能

jbd2的,全稱是journaling block driver 。這個程序實現的是檔案系統的日誌功能,磁碟使用日誌功能來保證資料的完整性

這是乙個眾所周知的錯誤。預設情況下,linux使用高達40%的可用記憶體來進行檔案系統快取。達到此標記後,檔案系統將所有未完成的資料重新整理到磁碟,導致所有後續ios同步。對於將該資料重新整理到磁碟,預設有120秒的時間限制。在這種情況下,io子系統的速度不足以在120秒內重新整理資料。這尤其發生在具有大量記憶體的系統上

通過設定將快取重新整理的標記從40%降低到10%來解決這個問題。在/etc/sysctl.conf 中設定vm.dirty_ratio = 10」。此設定不影響總體資料庫效能,因為您希望使用直接io並完全繞過檔案系統快取。

解決:sysctl -a | grep dirty

在/etc/sysctl.conf 中設定vm.dirty_ratio = 10」 vm.dirty_background_ratio=5

立即生效:

永久修改(需要reboot生效):

vm.dirty_background_ratio = 5

vm.dirty_ratio = 10

或者關閉日誌功能

#檢查檔案系統是否帶有系統日誌功能

#dumpe2fs /dev/vda | grep 『filesystem features』 | grep 『has_journal』

關閉功能

#tune2fs -o ^has_journal /dev/vda

或者修改磁碟掛載時的引數commit 預設為5s

可以修改/etc/fstab 來增加mount時的引數 或者禁用barrier特性(還是不要禁用的好)

現在的磁碟上一般都配有內部快取,以便重新調整批量資料的寫入順序,優化寫入效能,因此檔案系統必須在日誌資料寫入磁碟之後才能寫commit(commit=xx 每xx秒同步所有的資料和元資料。預設是每5秒)記錄;若commit記錄寫入在先,而日誌有可能損壞,就會影響資料完整性;ext4檔案系統預設啟用barrier功能,只有當barrier之前的資料全部寫入磁碟,才能寫barrier之後的資料;barrier的存在保證了資料完整性;

附:網上有人發現:

用iotop檢視發現[jbd2/dm-2-8]幾乎占用了99%的io使用率,但是卻沒有輸入輸出

使用#dstat --aio --io --disk --tcp --top-io-adv --top-bio-adv 和#iostat 2個命令進行排查

他的原因是mysql開啟了sync_binlog引數導致事務提交後,重新整理到磁碟時io太高了

注:vm.dirty_background_ratio:這個引數指定了當檔案系統快取髒頁數量達到系統記憶體百分之多少時(如5%)就會觸發pdflush/flush/kdmflush等後台回寫程序執行,將一定快取的髒頁非同步地刷入外存;

vm.dirty_ratio:而這個引數則指定了當檔案系統快取髒頁數量達到系統記憶體百分之多少時(如10%),系統不得不開始處理快取髒頁(因為此時髒頁數量已經比較多,為了避免資料丟失需要將一定髒頁刷入外存);在此過程中很多應用程序可能會因為系統轉而處理檔案io而阻塞

之前一直錯誤的一位dirty_ratio的觸發條件不可能達到,因為每次肯定會先達到vm.dirty_background_ratio的條件,後來才知道自己理解錯了。確實是先達到vm.dirty_background_ratio的條件然後觸發flush程序進行非同步的回寫操作,但是這一過程中應用程序仍然可以進行寫操作,如果多個應用程序寫入的量大於flush程序刷出的量那自然會達到vm.dirty_ratio這個引數所設定的坎,此時作業系統會轉入同步地處理髒頁的過程,阻塞應用程序

linux系統基本排查

1.檢視記憶體使用情況 free g當觀察到free欄已為0的時候,表示記憶體基本被吃完了,那就釋放記憶體吧。釋放記憶體 sync echo 3 proc sys vm drop cachessync表示將記憶體快取區內容立即同步到磁碟,為了保證安全可以多執行幾次。2.檢視磁碟使用情況 df h當發...

系統故障排查

一 1.建立用於儲存mbr備份的新硬碟分割槽,並永久掛載 1 新建乙個目錄 mkdir backmbr 2 掛載 mount dev sdd1 backmbr 永久掛載 vim etc fstab 3 備份mbr扇區資料 dd if dev sda of backmbr mbr.bak bs 512...

linux系統基本排查

1.檢視記憶體使用情況 free g當觀察到free欄已為0的時候,表示記憶體基本被吃完了,那就釋放記憶體吧。釋放記憶體 sync echo 3 proc sys vm drop cachessync表示將記憶體快取區內容立即同步到磁碟,為了保證安全可以多執行幾次。2.檢視磁碟使用情況 df h當發...