1. 程式人生 > >lsof命令與Linux磁碟空間的釋放

lsof命令與Linux磁碟空間的釋放

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)