由於項目原因需要定期檢查磁盤空間占用情況,常用檢查命令如下:
1、查看磁盤空間大小 df -lh 2、查看對應文件大小 du --max-depth=1 -h /
於一日發現在使用Flume + Kafka進行數據同步時,某一局點數據無法進行消費,通過df -lh查看發現系統空間滿了,如下:
/dev/xvda1 20G 20G 0G 100% /
然后,通過du --max-depth=1 -h / 查詢對應的大文件,發現此目錄下文件占用了2.3G的空間。通過各種方法找,都找不到大文件,唯一的線索是掛載的/data01目錄下Zookeeper的日志非常大,難道是此問題導致?
在一篇文章中看到過類似的情況,產生問題的原因:
在apache/tomcat在運行狀態下,清空了運行服務的日志,從而導致了/dev/xvda1 滿了的問題。一般情況下,大多數服務(包括腳本)在運行時,是不能刪除當前正在寫入的日志文件的。
原理分析:
1、當前access.log日志正在被apache進程占用。
2、 通過rm命令刪除access.log,實際只刪除了文件名(該日志文件應用記數不為0,因此空間不會被釋放)。
3、 通過rm命令刪除了access.log后,apache依然寫日志到access.log中,當開啟apache進程時,已經通過access.log定位到該文件的inode了,就是說再寫日志是不通access.log,因此即使刪除了access.log,apache依然寫日志到access.log所在的inode節點,所以導致硬盤空間增加。
4、因為刪除了access.log,所以我們就找不到該文件了,du也查不到,就會出現硬盤滿了但看不到究竟是哪些文件占用的。
解決方法:
重啟該日志文件的相關服務或程序,如:為apache日志文件則重啟apache。
仿照該方法,先停止Zookeeper的運行,然后刪除Zookeeper日志,重啟Zookeeper后發現服務消費正常