inode問題定位與解決
問題描述
? 最近在登陸云服務(wù)器的時候發(fā)現(xiàn)服務(wù)器登陸不上,看了下監(jiān)控已經(jīng)OOM了,只能重啟服務(wù)器,重啟了以后可以登陸上去,但是發(fā)現(xiàn)一些命令總是報錯,顯示的是磁盤空間已滿,但是使用df -Th的時候發(fā)現(xiàn)磁盤并沒有滿,所以懷疑是inode節(jié)點(diǎn)的問題,使用命令發(fā)現(xiàn)真的是inode節(jié)點(diǎn)的問題:
df -i
分析原因
? 雖然發(fā)現(xiàn)了問題,因?yàn)槭褂眠@個機(jī)器項(xiàng)目是外包出去的,外包那邊也不清楚怎么回事,最初懷疑是日志的問題,但是發(fā)現(xiàn)日志并沒有打太多,這就很糾結(jié)了,那應(yīng)該怎么統(tǒng)計出來是哪里的文件太多了哪?原本打算使用tree命令,但是第一,inode已經(jīng)滿了,軟件也裝不上。第二,tree不可能統(tǒng)計出來也相當(dāng)?shù)穆闊?。一個一個的找也不太顯示,于是自己編寫了一行命令:
for i in /*; do echo i; find i | wc -l; done
發(fā)現(xiàn)了文件大多都積壓在maildrop目錄下面
解決辦法
? 解決辦法就是刪除這些文件,但是刪的時候問題又來了,這些文件(大約100多萬)如果直接以rm -rf刪除是非常慢的,于是網(wǎng)上搜了一個命令,還沒有來得及細(xì)看
find 目錄 -type f -name '*' -print0 | xargs -0 rm
? 這下問題解決了,還要分析一下為什么會堆積這么多的文件,網(wǎng)上一搜到處都是,就直接把原因粘貼過來了.
產(chǎn)生原因
? linux在執(zhí)行cron時,會將cron執(zhí)行腳本中的output和warning信息,都會以郵件的形式發(fā)送Cron所有者, 而由于客戶環(huán)境中的sendmail和postfix沒有正常運(yùn)行,導(dǎo)致郵件發(fā)送不成功,全部小文件堆積在了maildrop目錄下面,而且沒有自動清理轉(zhuǎn)換的機(jī)制,所以長達(dá)一年的時間,此目錄已堆積了大量的文件。
解決方法:
在cron的開頭加上如下字段
MAILTO=""