linux proc 占用空间,一种诡异的Linux磁盘空间被占满问题
8種機械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
- 服務報錯,提示沒有足夠磁盤空間.登錄服務器,使用df -h 查看磁盤空間使用率(此臺為模擬,真實服務器使用率100%)
在根目錄下使用du -sh *, 查看各文件夾大小, 發現其實這些文件加一起也辦不到服務器磁盤空間40G的一半
(使用du -sh * | sort -rh命令,對各文件按大小排序,更加直觀)
(外記:du -h --max-depth=1,用于查看當前目錄哥文件占用最大)看到 cannot access 'proc/4086/task/4086/fd/4': No such file or directory,很自然想到會不是這里的問題,發現這實際是一條歧路,/proc目錄有時可能會很大,甚至140T,但這個數字既不是磁盤空間,也不是內存空間.可將該目錄簡單理解為一個”運行中心”,是一個位于內存中的偽文件系統(in-memory pseudo-file system).該目錄下保存的不是真正的文件和目錄,而是一些“運行時”信息.linux中許多工具的數據來源正是proc目錄中的內容
更多關于/proc的信息,可參見如下:
- 繼續追查,谷歌到很多類似癥狀,大概答案是:通過rm或者文件管理器刪除文件,只是將它會從文件系統的目錄結構上解除鏈接(unlink),也就是說只是刪除了文件和系統目錄結構的鏈接;如果文件在刪除時是被打開的(有一個進程正在使用該文件,文件被進程鎖定或者有進程一直在向這個文件寫數據等)狀態,那么進程將仍然可以讀取該文件,也就是說沒有刪除掉文件在讀取的狀態,所以磁盤空間也就會一直被占用。一個文件在文件系統中的存放分為兩個部分:數據部分和指針部分,指針位于文件系統的meta-data中,數據被刪除后,這個指針就從meta-data中清除了,而數據部分存儲在磁盤中,數據對應的指針從meta-data中清除后,文件數據部分占用的空間就可以被覆蓋并寫入新的內容,之所以出現刪除文件后,空間還沒釋放,就是因為有進程還在一直向這個文件寫入內容,導致雖然刪除了文件,但文件對應的指針部分由于進程鎖定,并未從meta-data中清除,而由于指針并未被刪除,那么系統內核就認為文件并未被刪除,因此通過df命令查詢空間并未釋放也就不足為奇了。使用lsof | grep deleted,果然是好幾屏的 已刪除文件的磁盤讀寫操作進程
參見:在我準備寫shell, 用kill pid 殺死占用被刪除文件的進程時,發現那臺占用率100%的機器沒有安裝lsof(是的,lsof需要手抖install).想刪掉部分日志文件,給其騰出空間,發現剛刪除立即yum install lsof,都會提示free空間為0
無奈重啟服務器,再打開使用df -h查看磁盤使用率,然后一切正常…
8G/20G,約為20%
總結重啟服務器或kill pid方式都能解決該問題
記錄排查&解決這個問題中涉及到的一些命令及延伸
lsof
查看文件大小&&排序
ll -h,輸出的文件大小就是human可讀的樣式了
總結
以上是生活随笔為你收集整理的linux proc 占用空间,一种诡异的Linux磁盘空间被占满问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux无线网络密码修改,linux无
- 下一篇: crt无法网络连接linux开发板,se