記一次守護日誌導致硬盤空間告警問題

記一次守護日誌導致硬盤空間告警問題

問題

後臺守護進程高頻寫日誌導致硬盤空間頻繁報警, 直接刪除日誌文件硬盤空間依然增長.

初步分析爲日誌文件當前狀態爲open狀態, 當文件open以後,系統就以inode號碼來識別這個文件,不再考慮文件名.刪除一個已open日誌文件, 只是影響到文件系統中inode引用鏈接數, 並未影響進程已打開文件inode文件數據block, 寫操作依然有效, 導致硬盤空間不斷增長.

解決方法1

通過proc文件系統( /proc/pid/fd ) 獲取進程運行中文件句柄鏈接進而獲取實際關聯的文件名稱, 並強制使用 ‘> fd’ 清空日誌.

pidof xxx
ls -l /proc/pid/fd/
lrwx------    1 root     root            64 May 24 10:39 0 -> /tmp/2018-04-19_205225.log (deleted)
lrwx------    1 root     root            64 May 24 10:39 1 -> /tmp/2018-04-19_205225.log (deleted)
lrwx------    1 root     root            64 May 24 10:39 2 -> /tmp/2018-04-19_205225.log (deleted)
...
(deleted) 標識日誌文件已刪除

> 2
強制清空日誌

解決方法2

重定向當前進程日誌文件句柄到 /dev/null. 這裏需要一個工具reredirect, 可以將運行中進程文件句柄直接重定向到指定文件或者文件句柄. 其實現原理爲通過 ptrace attach 到運行中進程, 調用 syscall dup dup2 重定向指定文件句柄即可.

reredirect -N -m /dev/null pid 

-N 不恢復原來文件句柄.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章