今天下午看到zabbix上報警,提示有一台測試伺服器硬碟快要滿了,用量已經超過了百分之八十,我是這麼做的:
第一步:首先通過df -h檢視一下哪個路徑下的空間用量比較大,結果發現是/下占用的空間比較多
[root@kk var]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 45G 4.8G 41G 81% /
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 199M 0 199M 0% /run/user/0
第二步:切加到根目錄下,執行su -sh ./* 檢視比較大的目錄
[root@kk]# du -sh /*
0 /bin
100M /boot
0 /dev
32M /etc
0 /home
0 /lib
0 /lib64
0 /media
0 /mnt
0 /proc
72K /root
9.5M /run
0 /sbin
0 /srv
0 /sys
4.0K /tmp
2.2G /usr
38G /var #發現罪魁禍首在這裡面
第三步:找出大檔案
[root@kk var]# find ./ -size +500M
./nginx_access.log
[root@kk var]# du -sh ./nginx_access.log
37G ./nginx_access.log
我打開這個檔案之後,發現都是nginx的日志,而且都是同一個源位址192.168.66.6/24,192.168.66.0/24是我劃給開發部分使用的網段,而且我用tail -f 看了一下這個檔案還在一直增大,我沒有貿然删除檔案,去問了一下開發,開發那幫人說也不知道怎麼回事?幸好日志檔案裡面有源ip位址,于是我在他們的辦公區詢問了一下誰的IP位址是192.168.66.6,我讓他們趕緊檢視一下,結果有一半開發都手忙腳亂的去百度如何檢視電腦的IP位址!!

當時我想到一個好辦法,我登入上路由器,直接把192.168.66.6這個IP位址和對應的MAC位址都給禁用了!禁用了之後使用這個IP位址的電腦就不能上網了!這個人肯定會浮出水面,因為公司的網是我管着,他們搞不定隻能來找我!
果真,沒一會兒,新來的測試妹子一臉委屈的說她的電腦不能上網了!
我問她這兩天有沒有測試什麼東西?她說前兩天用軟體測試了一個什麼,但是就測試了一會兒就把軟體關了,再次問他們确定了那個檔案是沒有什麼用的,于是我就是把那人大日志檔案給删除了,本以為完事了,結果通過df -h一檢視,var目錄還是那麼大,通過find檢視時大檔案查不到了,應該是被删除 了呀!但是為什麼磁盤占用量還是那麼大呢?
思來想去,不知道昨回事!這裡逼我出絕招了,網管三大法寶:重裝、重新開機、格式化,于是我重新開機了伺服器(測試環境,重新開機一下沒啥大影響),這一招真的屢試不爽,重新開機完成之後再去通過df -h檢視,發現真的好了!占用量一下子降到了百分之三十,怎麼會這樣?重新開機一下伺服器就好了,想不通。
後來經過半天的谷歌,百度之後發現大多數服務(包括腳本)在運作時,是不能删除目前正在寫入的日志檔案的, 清空了運作服務的日志,這裡是清理了當天或正在寫入的日志檔案,之前的沒有清理掉,進而導緻了上面問題。 原來是這樣,當nginx服務運作運作的時候會“綁定”上日志檔案,雖然我表現上清理了,但實作上nginx程序并沒有釋放日志檔案,清理的隻是檔案名,nginx寫日志的時候并不是根據檔案名寫入日志,而是根據檔案的inode号,而inode号還沒有釋放,當我重新開機伺服器之後,就相當重新開機了nginx服務,就把這個檔案的inode号釋放了,是以删除操作就變正常了!
我趕緊跑到測試妹子的電腦看了一下,果然,果然,那個測試軟體一直在背景運作着……
00 02 * * * *
find /var/log/ -type f -mtime +3 | xargs rm -f