今天login server的一個網站,發現login后沒有生成session。根據以往經驗,一般是空間已滿導致session文件生成失敗。
df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/dev01-root 75G 58G 14G 82% / udev 2.0G 4.0K 2.0G 1% /dev tmpfs 396M 292K 396M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 4.0K 2.0G 1% /run/shm /dev/sda1 228M 149M 68M 69% /boot
空間剩余14G,可以排除空間已滿的情況。導致文件生成失敗還有另一個原因,就是文件索引節點inode已滿。
df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/mapper/dev01-root 4964352 4964352 0 100% / udev 503779 440 503339 1% /dev tmpfs 506183 353 505830 1% /run none 506183 5 506178 1% /run/lock none 506183 2 506181 1% /run/shm /dev/sda1 124496 255 124241 1% /boot
inodes 占用100%,果然是這個問題。
解決方法:刪除無用的臨時文件,釋放inode。
查找發現 /tmp 目錄下有很多sess_xxxxx的 session臨時文件。
ls -lt /tmp | wc -l 4011517
進入/tmp目錄,執行find -exec命令
sudo find /tmp -type f -exec rm {} \;
如果使用rm *,有可能因為文件數量太多而出現Argument list too long錯誤,關於Argument list too long錯誤可以參考《linux Argument list too long錯誤解決方法》
除了/tmp的臨時文件外,0字節的文件也會占用inode,應該也釋放。
遍歷尋找0字節的文件,並刪除。
sudo find /home -type f -size 0 -exec rm {} \;
刪除后,inode 的使用量減少為19%,可以正常使用了。
df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/mapper/dev01-root 4964352 940835 4023517 19% / udev 503779 440 503339 1% /dev tmpfs 506183 353 505830 1% /run none 506183 5 506178 1% /run/lock none 506183 2 506181 1% /run/shm /dev/sda1 124496 255 124241 1% /boot
=================================================================================================
當新建文件時,會提示no space left。實際上,用df看,是有剩余空間的。
但是用 df -i 查看時,會發現,inode用完了,使用率100%。
所以不能新建文件,卻能append一個文件的內容。
情況是發生在/var 分區,手工找了找,是/var/spool/clientmqueue里文件太多:
[root@localhost clientmqueue]# ls | wc -w
256210
[root@localhost clientmqueue]# rm -f *
-bash: /bin/rm: Argument list too long
[root@localhost clientmqueue]# for i in `ls` ; do rm -f $i; done
好幾分鍾,才刪了4萬多個的文件,
還是直接刪除clientmqueue目錄,快很多。再建立這個目錄,並恢復相應的屬性即可。
手動清理方法:
find /var/spool/clientmqueue/ -type f |xargs rm -f
或
添加定時任務處理
http://blog.dingjian.me/2013/11/150.html