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命令顯示哪些進行佔用了被刪除的文件。將有問題的進程重啓,磁盤空間就會得到釋放。

[root@dancen /]# 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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章