一個由INode節點爆滿引起的業務故障

來源:互聯網
上載者:User

標籤:

一個由INode節點爆滿引起的業務故障

http://2358205.blog.51cto.com/2348205/1747951

 

好久沒有寫博文了,今天周六,分享一下剛剛處理完的一個小故障

 

現象描述:

運營妹紙那邊反應運營後台報錯,具體如下:

 

 

一開始以為是tmp的目錄沒有許可權寫入,查看目錄許可權,777,不是這個問題;

 

查看nginx的錯誤記錄檔,部分錯誤資訊如下,500錯誤:

113.xx.xx.48 - - [05/Mar/2016:19:33:09 +0800] "POST /index.php?r=site/login HTTP/1.1" 500 112266 "http://xxx.xxx.com/index.php?r=site/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"

14.xx.xx.67 - - [05/Mar/2016:19:33:14 +0800] "GET /index.php?r=site/login HTTP/1.1" 500 120922 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"

 

 

查看mysql的錯誤記錄檔,日誌如下,但是查看了較早以前,也有以下報錯,之前不出現問題,為什麼偏偏這時候報錯,應該不是這個問題引起的,繼續查...

 

登陸進資料庫,查看資料庫表,可以select表資料,但是desc結構的時候,連續desc了幾張表,結果都一樣,報以下錯誤:

 

難道是表損壞了?屁顛屁顛執行表修複命令,命令如下:

/usr/local/mysql/bin/mysqlcheck --all-databases -uUSERNAME -pPASSWORD -r

 

部分表修複過程如下:

 

 

修複完成之後,媽蛋,還是一樣的報錯資訊,

 

 

仔細看看,媽蛋,這是寫不了臨時檔案的意思嗎?但是為什麼desc會涉及建立臨時檔案的問題呢?有待深究!!

ERROR 1 (HY000):Can‘t create/write to file ‘/tmp/#sql_3b25_0.MYI‘ (Errcode:28)

 

 

 

是不是磁碟空間滿了?沒收到警示資訊啊。。。抱著疑惑的心態查看了下磁碟空間,具體如下:

[[email protected] ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/xx1       20G  6.9G   12G  37% /

tmpfs           3.9G     0  3.9G   0% /dev/shm

/dev/xxx        63G   26G   34G  44% /mnt

 

沒滿啊。。。奇怪。。看下my.cnf檔案是不是有什麼改動。

 

vim的時候報了一個錯誤。如下:

E303:Unable to open swap file for "my.cnf",recovery impossible

 

一開始沒留意,繼續編輯,看了下檔案裡面的內容,沒改動啊,許可權和屬主也是正常的,那就奇怪了。。

 

然後vim一下其他檔案,也是有提示錯誤。。。。無法建立分頁檔。。

 

 

於是我試試touch一下,哎呀,建立不了新檔案,mkdir呢,也是一樣。。提示沒有磁碟空間。。。

touch: cannot touch `e‘: No space left on device

 

剛剛df -h不是很明顯還有空間麼。難道是檔案的節點數滿了?果斷df -i一下。。。

[[email protected] ~]# df -i

Filesystem      Inodes  IUsed   IFree IUse% Mounted on

/dev/xxx     1310720 171826 1138894   100% /

tmpfs          1007261      1 1007260    1% /dev/shm

/dev/xxx      4194304 463685 3730619   12% /mnt

 

 

果然,/目錄的節點數使用了100%,於是,問題找到了,那再查查到底是什麼檔案佔用了這麼多的檔案節點.

 

最後定位到/var/spool/clientmqueue下面有很多的小檔案。

說明:系統中cron執行的程式有輸出內容,輸出內容會以郵件形式發給cron的使用者,而sendmail沒有啟動所以就產生了這些檔案;

 

 

既然知道這個檔案產生的原因,刪除掉唄,當前保證業務能正常運行最重要。

 

cd到/var/spool/clientmqueue這個目錄下,使用rm -rf ./*  ,哎呀,不給刪?報錯:

/bin/rm: argument list too long

最後使用ls |xargs rm -rf 刪除。。。。

說明:使用rm預設接收的參數是有限的,使用此命令可以將檔案名稱輸出並且分組刪除。。

 

使用df -i再次查看,/目錄的節點數也釋放了一些。再次訪問業務,搞定!!

[[email protected] clientmqueue]# df -i

Filesystem      Inodes  IUsed   IFree IUse% Mounted on

/dev/xxx     1310720 171826 1138894   14% /

tmpfs          1007261      1 1007260    1% /dev/shm

/dev/xxx      4194304 463685 3730619   12% /mnt

 

 

說明:inode譯成中文就是索引節點,每個存放裝置(例如硬碟)或存放裝置的分區被格式化為檔案系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來儲存資料用的。而inode呢,就是用來儲存這些資料的資訊,這些資訊包括檔案大小、屬主、歸屬的使用者組、讀寫權限等。inode為每個檔案進行資訊索引,所以就有了inode的數值。作業系統根據指令,能通過inode值最快的找到相對應的檔案。

 

 

監控系統裡除了剩餘磁碟容量監控,應該把剩餘inode數量監控也要加上~
df.bytes.free.percent; df.inodes.free.percent

 

 /var/spool/clientmqueue/目錄下存在大量檔案的原因及解決方案 2
 http://blog.itpub.net/22036495/viewspace-1056821/

 

問題現象:linux操作系統中的/var/spool/clientmqueue/目錄下存在大量檔案。

原因分析:

  系統中有使用者開啟了cron,而cron中執行的程式有輸出內容,輸出內容會以郵件形式發給cron的使用者,而sendmail沒有啟動所以就產生了這些檔案;

  解決辦法:
  1、 將crontab裡面的命令後面加上> /dev/null 2>&1

一個由INode節點爆滿引起的業務故障

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.