LINUX運(yùn)維實(shí)戰(zhàn)案例之文件已刪除但空間不釋放問(wèn)題的分析與解決辦法

1、錯(cuò)誤現(xiàn)象
運(yùn)維的監(jiān)控系統(tǒng)發(fā)來(lái)通知,報(bào)告一臺(tái)服務(wù)器空間滿了,登陸服務(wù)器查看,根分區(qū)確實(shí)沒(méi)有空間了,如下圖所示:
這里首先說(shuō)明一下服務(wù)器的一些刪除策略,由于Linux沒(méi)有回收站功能,我們的線上服務(wù)器所有要?jiǎng)h除的文件都會(huì)首先移動(dòng)到系統(tǒng)/tmp目錄下,然后定期清除/tmp目錄下的數(shù)據(jù)。這個(gè)策略本身沒(méi)有問(wèn)題,但是通過(guò)檢查發(fā)現(xiàn)這臺(tái)服務(wù)器的系統(tǒng)分區(qū)中并沒(méi)有單獨(dú)劃分/tmp分區(qū),這樣/tmp下的數(shù)據(jù)其實(shí)是占用了根分區(qū)的空間。既然找到了問(wèn)題,那么刪除/tmp目錄下一些大數(shù)據(jù)即可,執(zhí)行如下命令,檢查/tmp下最大的三個(gè)數(shù)據(jù)文件,如下圖所示:
[root@localhost~ ]# du -s /tmp/*|sort -nr|head -3
69206016 /tmp/access_log
36 /tmp/hsperfdata_root
36 /tmp/hsperfdata_mapred
通過(guò)命令輸出發(fā)現(xiàn)在/tmp目錄下有個(gè)66G大小的文件access_log,這個(gè)文件應(yīng)該是apache產(chǎn)生的訪問(wèn)日志文件,從日志大小來(lái)看,應(yīng)該是很久沒(méi)有清理apache日志文件了,基本判定是這個(gè)文件導(dǎo)致的根空間爆滿,在確認(rèn)此文件可以刪除后,執(zhí)行如下刪除操作:
[root@localhost ~]# rm /tmp/access_log
接著查看系統(tǒng)根分區(qū)空間是否釋放,如下圖所示:
從輸出可以看到,根分區(qū)空間仍然沒(méi)有釋放,這是怎么回事?
2、解決思路
一般說(shuō)來(lái)不會(huì)出現(xiàn)刪除文件后空間不釋放的情況,但是也存在例外,比如文件被進(jìn)程鎖定,或者有進(jìn)程一直在向這個(gè)文件寫(xiě)數(shù)據(jù)等等,要理解這個(gè)問(wèn)題,就需要知道Linux下文件的存儲(chǔ)機(jī)制和存儲(chǔ)結(jié)構(gòu)。
一個(gè)文件在文件系統(tǒng)中的存放分為兩個(gè)部分:數(shù)據(jù)部分和指針部分,指針位于文件系統(tǒng)的meta-data中,數(shù)據(jù)被刪除后,這個(gè)指針就從meta-data中清除了,而數(shù)據(jù)部分存儲(chǔ)在磁盤中,數(shù)據(jù)對(duì)應(yīng)的指針從meta-data中清除后,文件數(shù)據(jù)部分占用的空間就可以被覆蓋并寫(xiě)入新的內(nèi)容,之所以出現(xiàn)刪除access_log文件后,空間還沒(méi)釋放,就是因?yàn)閔ttpd進(jìn)程還在一直向這個(gè)文件寫(xiě)入內(nèi)容,導(dǎo)致雖然刪除了access_log文件,但文件對(duì)應(yīng)的指針部分由于進(jìn)程鎖定,并未從meta-data中清除,而由于指針并未被刪除,那么系統(tǒng)內(nèi)核就認(rèn)為文件并未被刪除,因此通過(guò)df命令查詢空間并未釋放也就不足為奇了。
3、問(wèn)題排查
既然有了解決問(wèn)題的思路,那么接下來(lái)看看是否有進(jìn)程一直在向acess.log文件中寫(xiě)數(shù)據(jù),這里需要用到Linux下的lsof命令,通過(guò)這個(gè)命令可以獲取一個(gè)已經(jīng)被刪除但仍然被應(yīng)用程序占用的文件列表,命令執(zhí)行如下圖所示:
從輸出結(jié)果可以看到,/tmp/acess.log文件被進(jìn)程httpd鎖定,而httpd進(jìn)程還一直向這個(gè)文件寫(xiě)入日志數(shù)據(jù),從第七列可知,這個(gè)日志文件大小僅70G,而系統(tǒng)根分區(qū)總大小才100G,由此可知,這個(gè)文件就是導(dǎo)致系統(tǒng)根分區(qū)空間耗盡的罪魁禍?zhǔn)?,在最后一列?ldquo;deleted”狀態(tài),說(shuō)明這個(gè)日志文件已經(jīng)被刪除,但由于進(jìn)程還在一直向此文件寫(xiě)入數(shù)據(jù),空間并未釋放。
4、解決問(wèn)題
到這里問(wèn)題就基本排查清楚了,解決這一類問(wèn)題的方法有很多種,最簡(jiǎn)單的方法是關(guān)閉或者重啟httpd進(jìn)程,當(dāng)然也可以重啟操作系統(tǒng),不過(guò)這并不是最好的方法,對(duì)待這種進(jìn)程不停對(duì)文件寫(xiě)日志的操作,要釋放文件占用的磁盤空間,最好的方法是在線清空這個(gè)文件,可以通過(guò)如下命令完成:
[root@localhost ~]# echo " " >/tmp/acess.log
通過(guò)這種方法,磁盤空間不但可以馬上釋放,也可保障進(jìn)程繼續(xù)向文件寫(xiě)入日志,這種方法經(jīng)常用于在線清理Apache、Tomcat、Nginx等Web服務(wù)產(chǎn)生的日志文件。謝謝閱讀,希望能幫到大家,請(qǐng)繼續(xù)關(guān)注腳本之家,我們會(huì)努力分享更多優(yōu)秀的文章。
以上就是LINUX運(yùn)維實(shí)戰(zhàn)案例之文件已刪除但空間不釋放問(wèn)題的分析與解決辦法,本文出自 “技術(shù)成就夢(mèng)想” 博客,謝絕轉(zhuǎn)載!謝謝閱讀,希望能幫到大家,請(qǐng)繼續(xù)關(guān)注腳本之家,我們會(huì)努力分享更多優(yōu)秀的文章。
相關(guān)文章
linux運(yùn)維實(shí)戰(zhàn)案例之Argument list too long錯(cuò)誤與解決方法
作為一名運(yùn)維人員來(lái)說(shuō),這個(gè)錯(cuò)誤并不陌生,在執(zhí)行rm、cp、mv等命令時(shí),如果要操作的文件數(shù)很多,可能會(huì)使用通配符批量處理大量文件,這時(shí)就可能會(huì)出現(xiàn)“Argument list too2017-04-02Linux主流架構(gòu)運(yùn)維工作簡(jiǎn)單剖析講解
今天小編要為大家?guī)?lái)的是Linux主流架構(gòu)運(yùn)維工作簡(jiǎn)單剖析講解;希望對(duì)大家會(huì)有幫助。有需要的朋友一起去看看吧2017-03-30- 整理一套入門的運(yùn)維常用命令,希望喜歡Linux的朋友們更快的熟悉并掌握Linux運(yùn)維,這里沒(méi)有太多理論,有的只是干貨,這里我會(huì)把網(wǎng)上看到的、自己平時(shí)用到的、和感興趣的都整2017-01-22
運(yùn)維老鳥(niǎo)談生產(chǎn)場(chǎng)景對(duì)linux系統(tǒng)進(jìn)行分區(qū)的方法
一些朋友還不知道生產(chǎn)場(chǎng)景如何對(duì)linux系統(tǒng)進(jìn)行分區(qū)?今天小編為大家?guī)?lái)的是運(yùn)維老鳥(niǎo)談生產(chǎn)場(chǎng)景對(duì)linux系統(tǒng)進(jìn)行分區(qū)的方法;有需要的朋友可以過(guò)來(lái)看看2016-12-14Linux下的自動(dòng)化運(yùn)維工具ansible初探
這篇文章主要介紹了Linux下的自動(dòng)化運(yùn)維工具ansible,這個(gè)軟件一般被用于集群批量部署,需要的朋友可以參考下2015-10-12Linux運(yùn)維工程師入門必備的10個(gè)技術(shù)點(diǎn)
這篇文章主要介紹了Linux運(yùn)維工程師入門必備的10個(gè)技術(shù)點(diǎn),本文是運(yùn)維工程師的心得總結(jié),還有一些對(duì)學(xué)習(xí)Linux系統(tǒng)的建議,需要的朋友可以參考下2015-06-15- 這篇文章主要介紹了整理的一些Linux運(yùn)維工程師面試題,本文整理了Linux操作系統(tǒng)知識(shí)、Linux命令及文件操作、Linux磁盤及軟件管理操作、Linux服務(wù)配置及管理4大類面試題,需要2015-05-18
linux中運(yùn)維自動(dòng)化之Cobbler 系統(tǒng)安裝使用詳解
這篇文章主要為大家介紹了linux中運(yùn)維自動(dòng)化之Cobbler系統(tǒng)安裝使用,Cobbler是一個(gè)快速網(wǎng)絡(luò)安裝linux的服務(wù),而且在經(jīng)過(guò)調(diào)整也可以支持網(wǎng)絡(luò)安裝windows。使用 Cobbler,您2014-10-09LINUX安全運(yùn)維之:文件系統(tǒng)的權(quán)限修改與安全設(shè)置
這篇文章主要為大家介紹了LINUX系統(tǒng)的文件系統(tǒng)的權(quán)限修改與安全設(shè)置,系統(tǒng)運(yùn)維人員有時(shí)候可能會(huì)遇到通過(guò)root用戶都不能修改或者刪除某個(gè)文件的情況,產(chǎn)生這種情況的大部分2014-09-28談?wù)凩inux運(yùn)維人員是否需要掌握一門編程語(yǔ)言
這篇文章主要介紹了談?wù)凩inux運(yùn)維人員是否需要掌握一門編程語(yǔ)言,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下,下面就來(lái)和我一起看看吧,希望大家在閱2018-01-24