lsof命令與Linux磁碟空間的釋放
阿新 • • 發佈:2018-12-12
lsof命令簡介
lsof(list open files)是一個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。所以如傳輸控制協議 (TCP) 和使用者資料報協議 (UDP) 套接字等,系統在後臺都為該應用程式分配了一個檔案描述符,無論這個檔案的本質如何,該檔案描述符為應用程式與基礎作業系統之間的互動提供了通用介面。因為應用程式開啟檔案的描述符列表提供了大量關於這個應用程式本身的資訊,因此通過lsof工具能夠檢視這個列表對系統監測以及排錯將是很有幫助的。
1. 因為lsof命令需要訪問核心記憶體和各種檔案,所以需要root使用者執行。
2. lsof命令並非系統自帶命令,如果找不到該命令,以Cent OS為例,執行以下命令進行安裝:
yum install lsof
Linux磁碟空間
有時會出現這樣的情況,磁碟空間顯示已經被佔滿,但是在檢視磁碟的具體檔案佔用情況時,發現磁碟仍然有很大的空餘空間。重啟系統後,剩餘的磁碟空間才會顯示出來。
1. 執行df命令檢視磁碟使用情況,發現磁碟已經滿了。
-bash-4.2$ df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 30G 30G 0 100% / devtmpfs devtmpfs 489M 0 489M 0% /dev tmpfs tmpfs 497M 0 497M 0% /dev/shm tmpfs tmpfs 497M 50M 447M 11% /run tmpfs tmpfs 497M 0 497M 0% /sys/fs/cgroup
2. 執行du命令檢視各個目錄的磁碟佔用情況,把各個目錄檔案的大小相加,發現並沒有佔滿磁碟,有10多G空間莫名失蹤。
-bash-4.2$ du -h --max-depth=1 /home
146M /home/dancen
16M /home/logs
11G /home/serverdog
11G /home
3. 為何會出現這樣的情況呢?
這是因為磁碟上的某些檔案已經被刪除,但是一些程序仍然持有這些檔案,因此其原來佔用的磁碟空間並沒有被釋放。
執行lsof命令顯示哪些進行佔用了被刪除的檔案。將有問題的程序重啟,磁碟空間就會得到釋放。
[[email protected] /]# lsof | grep delete mysqld 2470 mysql 4u REG 253,1 0 523577 /var/tmp/ibfTeQFn (deleted) mysqld 2470 mysql 5u REG 253,1 0 523579 /var/tmp/ibaHcIdW (deleted) mysqld 2470 mysql 6u REG 253,1 0 523581 /var/tmp/ibLjiALu (deleted) mysqld 2470 mysql 7u REG 253,1 0 523585 /var/tmp/ibCFnzTB (deleted) mysqld 2470 mysql 11u REG 253,1 0 523587 /var/tmp/ibCjuqva (deleted)