標籤:
今天在運行R指令碼的時候報了個錯:Fatal error: cannot create ‘R_TempDir‘。排除了是自己寫的代碼的問題,想著應該是某個沒見過的原因,google之,發現網上的說法是/tmp檔案夾佔滿了磁碟空間。
運行 df 命令:
Filesystem Size Used Avail Use% Mounted on/dev/mapper/VG00-LV01 50G 47G 16M 100% /
發現確實有個分區被佔滿了。。。
第一次碰到這種情況,繼續google之,使用如下命令
du -sh /* | sort -nr
可以得到 / 目錄下所有檔案和目錄的大小的排序結果。
從中找出最大的,在我的機器中/var檔案佔用了47個G的大小,應該就是它了,使用上面的命令繼續追蹤:
du -sh /var/* | sort -nrdu -sh /var/log/* | sort -nrdu -sh /var/log/httpd/* | sort -nr
一層一層往下追蹤,最後發現是 httpd/目錄下的ssl_error_log佔據了超大磁碟空間,看了下檔案內容,估計是某次連結導致了大量錯誤資訊被一遍遍的迴圈寫入。
不多想,直接把這檔案刪除。
運行 df -i:
Filesystem Inodes IUsed IFree IUse% Mounted on/dev/mapper/VG00-LV01 3276800 226882 3049918 7% /tmpfs 4069835 7 4069828 1% /dev/shm/dev/md0 51200 39 51161 1% /boot/dev/mapper/VG00-LV02 56705024 11756 56693268 1% /opt
沒有太大使用量,這是因為-i查看inode節點情況,和檔案大小是不同概念。
再次運行df -h命令:
Filesystem Size Used Avail Use% Mounted on/dev/mapper/VG00-LV01 50G 47G 16M 100% /
仍然還是100%,明明已經刪除了啊。。。 不解,繼續google之。。
結論是“在Linux中,當我們使用rm在linux上刪除了大檔案,但是如果有進程開啟了這個大檔案,卻沒有關閉這個檔案的控制代碼,那麼linux核心還是不會釋放這個檔案的磁碟空間,最後造成磁碟空間佔用100%,整個系統無法正常運行。這種情況下,通過df和du命令尋找的磁碟空間,兩者是無法匹配的,可能df顯示磁碟100%,而du尋找目錄的磁碟容量佔用卻很小。”
找出檔案使用者,kill掉:
lsof -n | grep deleted
找到使用ssl_error_log檔案的進程,kill掉,然後再次df -h,發現已經沒有100%的情況了。
處理完成~~
運行R 報錯R cannot R_TempDir, 繼而發現/dev/mapper/VG00-LV01 磁碟空間已滿