早上收到了服務(wù)器磁盤使用率超過閾值的報警,登陸到服務(wù)器查看。
1. 查看整體磁盤使用率
確認(rèn)磁盤的使用率確實超過閾值,使用如下命令:
df -H

發(fā)現(xiàn)/export目錄下磁盤的使用率是73%,超過了設(shè)定的報警閾值70%。
2. 進入export目錄,定位具體的大文件
cd /export
du -sh *

發(fā)現(xiàn)Logs目錄下最近有很多大的日志文件,比如,平常一天是幾百兆的文件,現(xiàn)在一天已經(jīng)4-5個G,肯定不是正常的現(xiàn)象。
查看了一下日志文件中的打印的內(nèi)容,發(fā)現(xiàn)很多是無效日志,而且之前的文件是可以刪除的,在這個基礎(chǔ)上,我開始了文件刪除,主要是一些大的歷史日志文件。
3. 刪除大的歷史文件
執(zhí)行如下命令:
rm -f cataout.out.xxx
刪除完畢之后,我以為磁盤空間就好了,打臉的是,瞬間又收到了報警,起初以為是誤報,執(zhí)行第一步的 df -H命令查看磁盤空間,發(fā)現(xiàn)磁盤空間并沒有變化,依舊是73%
經(jīng)過網(wǎng)上查找,知道rm只是將文件鏈接解除,如果此時有進程打開文件,系統(tǒng)是不會回收文件。說白就是,你刪除的文件被放入了“回收站”,但是你看不這個“回收站”,但文件還占用著磁盤空間。此時,在刪除文件的目錄下,執(zhí)行l(wèi)s命令已經(jīng)看不到被刪除的文件了,用du -sh命令也發(fā)現(xiàn)磁盤容量很少,但是執(zhí)行df -h會發(fā)現(xiàn)磁盤使用率并沒有變化。
4. 解決思路
一般情況下,有下面兩種方案:
- 重啟電腦,系統(tǒng)就會回收磁盤空間。
- kill掉打開文件的進程。
- 之后如果想永久刪除文件,應(yīng)該這樣執(zhí)行rm命令,/bin/rm -f catalina.out.xxx,其效果等同于windows下shift+delete 永久刪除
作為線上生產(chǎn)環(huán)境的服務(wù)器,重啟肯定不行。所以第一條直接pass,線上服務(wù)器也千萬別隨隨便便重啟,影響很大。
第三條,是之后刪除文件可以用到的,對于目前的情況不適用,所以pass。
所以只剩下第2條方案可以試一試了,在網(wǎng)上搜索了一下,發(fā)現(xiàn)lsof這個命令可以查看文件信息。通過命令lsof|grep deleted可以看到之前的日志文件都已經(jīng)deleted了。
然后,有兩種操作,
a. 重啟進程。restart xxx
b. echo " " > catalina.out.xxx
其中,第二種方法,不但可以讓磁盤空間可以馬上釋放,也可保障進程繼續(xù)向文件寫入日志,這種方法經(jīng)常用于在線清理Apache、Tomcat、Nginx等Web服務(wù)產(chǎn)生的日志文件。
再df -h就會發(fā)現(xiàn)磁盤使用率已經(jīng)降下來了。
當(dāng)然,線上的服務(wù)涉及到docker,最后的處理有docker運維人員的參與。