系统磁盘空间满的一个问题
我們的集成環境如果磁盤空間滿,一般情況下可以通過刪除log或者多余的文件來解決,但有時候,這種方法是無法解決的。以上次碰到情況為例:
服務器10.2.5.4磁盤空間滿,致使某核心無法正常運行。于是登陸核查,如下:
# df -h
文件系統????????????? 容量? 已用 可用 已用% 掛載點
/dev/sda2 9.7G 7.0G 2.3G 76% /
/dev/sda1 251M 19M 219M 8% /boot
/dev/sda5 54G 24G 28G 100% /home
none 1004M 0 1004M 0% /dev/shm
ccvob.alipay.net:/ccvob1
133G 68G 59G 54% /ccvob1
10.2.4.98:/home/nfsshare
225G 145G 69G 68% /share/upload
進入/home目錄使用du查看/home下的磁盤使用率
# cd /home
# du -sh *
3.1M admin
1.3G ctu
1.2G godzilla
76K log
40K nagios
609M paygw
784M smsgw
20G trade
24K ukulele
發現目錄home目錄下的子目錄所有文件大小加起來遠遠少于54G,可是卻提示home已經100%占用。這種干擾du查看磁盤空間使用率的問題,一般是下面兩種情況造成的:
?1、用戶刪除了文件,這些刪除的文件使用du無法查看,但系統仍然有進程在寫被刪除的文件。
?2、磁盤分區的某一個目錄掛載了另外一個分區時,du查看到的磁盤空間為掛載分區后的目錄空間。
由于home目錄未掛載另一分區,所以應該是用戶刪除系統的日志文件,而系統java進程沒被停掉這一情況造成的。
解決方法:
1、查找被刪除文件
?被刪除文件,在寫程序未退出的情況下,被刪除文件同樣會占用磁盤空間。
# lsof -n | head -1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
# lsof -n /home | grep deleted
由上面可以看出,這些log已經被刪除,但是java進程依然在寫這些log。
2、殺掉寫文件的java進程,磁盤空間會自然釋放
#pkill -9 19543
# df
文件系統?????????????? 1K-塊??????? 已用???? 可用 已用% 掛載點
/dev/sda2 10080520 7257740 2310712 76% /
/dev/sda1 256667 19223 224192 8% /boot
/dev/sda5 56087900 25093392 28145384 45% /home
總結:由于我們經常在沒有停掉系統的時候就直接刪除log,而有時候系統的java進程在重新啟動的時候并沒有停掉,依然在系統中運行并不停的在寫已經被刪除的日志文件,多次累積過后,就會造成磁盤空間變滿。所以,建議每次刪除系統log前,請執行下#killall java 先將該用戶下的系統停掉
轉載于:https://www.cnblogs.com/s1328/p/4885334.html
總結
以上是生活随笔為你收集整理的系统磁盘空间满的一个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp3.2 代码生成并点击验
- 下一篇: 手势识别器