其核心思想為建立乙個核心監測程序迴圈監測處於d狀態的每乙個程序(任務)。
核心配置:config_detect_hung_task
kernel hacking --->
[*] detect hung tasks
(120) default timeout for hung task detection (in seconds) (new)
[ ] panic (reboot) on hung tasks (new)
程序進入d狀態時間超過120秒後列印
info: task sync:16015 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
sync d c0512378 0 16015 1807 0x00000000
(__schedule+0x1d0/0x414) from (io_schedule+0x64/0x8c)
(io_schedule+0x64/0x8c) from (sleep_on_page+0x8/0x10)
(sleep_on_page+0x8/0x10) from (__wait_on_bit+0x78/0xb0)
(__wait_on_bit+0x78/0xb0) from (wait_on_page_bit+0xb4/0xbc)
(wait_on_page_bit+0xb4/0xbc) from (filemap_fdatawait_range+0xd4/0x130)
(filemap_fdatawait_range+0xd4/0x130) from (filemap_fdatawait+0x38/0x40)
(filemap_fdatawait+0x38/0x40) from (sync_inodes_sb+0x108/0x13c)
(sync_inodes_sb+0x108/0x13c) from (iterate_supers+0xa4/0xec)
(iterate_supers+0xa4/0xec) from (sys_sync+0x34/0x9c)
(sys_sync+0x34/0x9c) from (ret_fast_syscall+0x0/0x30)
關閉列印:echo 0 > /proc/sys/kernel/hung_task_timeout_secs
也可手動檢測,top或者ps檢視程序狀態,然後使用命令cat /proc/pid/status檢視狀態:state: d (disk sleep),檢視堆疊資訊:cat /proc/pid/stack
kernel hacking --->
-*- kernel debugging
[*] detect hard and soft lockups
[ ] panic (reboot) on soft lockups
config_lockup_detector=y
暫沒有復現出r狀態的卡住狀態情況。
config_debug_spinlock=y 檢測spinlock的未初始化使用等問題。配合nmi watchdog使用,能發現spinlock死鎖。
config_debug_mutexes=y 檢測並報告mutex錯誤
linux死鎖檢測與除錯
死鎖是指多個程序 執行緒 因為長久等待已被其他程序占有的的資源而陷入阻塞的一種狀態。當等待的資源一直得不到釋放,死鎖會一直持續下去。死鎖一旦發生,程式本身是解決不了的,只能依靠外部力量使得程式恢復執行,例如重啟,開門狗復位等。linux 提供了檢測死鎖的機制,主要分為 d 狀態死鎖和 r 狀態死鎖。...
死鎖檢測演算法
一 實驗目的 3 二 實驗內容 3 1 資料輸入 3 2 處理要求 3 三 實現思路 4 死鎖檢測機制 4 四 主要的資料結構 4 標頭檔案與巨集定義 4 程序結構體定義 4 初始化函式 4 讀入資料檔案 4 輸出所讀入的資料 4 檢測 5 顯示資訊函式 5 主函式 5 五 演算法流程圖 5 六 執...
如何檢測Linux核心的Rootkit
最近一段時間搞了些rootkit攻略,每個方法都比較徹底,無論是隱藏程序,還是隱藏cpu利用率,隱藏tcp連線,隱藏檔案,甚至隱藏cpu風扇的狂轉,均採用了相對底層的方案,一般的rootkit檢測很難檢測到。所謂的一般的rootkit就是那些通常的hook,比方說hook系統呼叫,hook proc...