欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux磁盤空間異常爆滿的排查和處理方式

 更新時間:2024年12月18日 14:34:10   作者:忍冬行者  
在服務(wù)器運維過程中,磁盤空間不足會導(dǎo)致業(yè)務(wù)異常,定位問題時,可以使用df-Hl、du-hs、du-d參數(shù)或find命令查看空間,刪除備份文件和日志信息后,空間未釋放的原因是文件被打開,進程仍在使用

問題現(xiàn)象

在服務(wù)器運維過程中,我們時常會遇到這樣的情況,服務(wù)器磁盤空間使用率達到100%,業(yè)務(wù)出現(xiàn)異常。

問題定位

1.登錄服務(wù)器,通過df -Hl查看

[root@k8s-master1 ~]# df -Hl
文件系統(tǒng)                 容量  已用  可用 已用% 掛載點
devtmpfs                 8.4G     0  8.4G    0% /dev
tmpfs                    8.5G     0  8.5G    0% /dev/shm
tmpfs                    8.5G  774M  7.7G   10% /run
tmpfs                    8.5G     0  8.5G    0% /sys/fs/cgroup
/dev/mapper/centos-root  136G   68G   68G   51% /
/dev/sda1                1.1G  238M  827M   23% /boot

2.查找占用空間大的目錄或文件

笨方法:在根目錄下,通過du -hs命令,列出各目錄所占空間大小

[root@k8s-master1 /]# du -hs *
0	bin
194M	boot
1012K	core.580
0	dev
37M	etc
21M	home
7.7G	kuboard-data
0	lib
0	lib64
0	media
0	mnt
135M	opt
du: 無法訪問"proc/21212/task/21212/fd/3": 沒有那個文件或目錄
du: 無法訪問"proc/21212/task/21212/fdinfo/3": 沒有那個文件或目錄
du: 無法訪問"proc/21212/fd/3": 沒有那個文件或目錄
du: 無法訪問"proc/21212/fdinfo/3": 沒有那個文件或目錄
0	proc
1.6G	root
738M	run
0	sbin
0	src
0	srv
0	sys
6.2M	tmp
3.2G	usr
51G	var

相對高效一點的方法是通過du的-d參數(shù),或--max-depth,設(shè)置查詢的目錄深度

du -h -d 2|grep [GT] |sort -nr  
du -h --max-depth=2|grep [GT] |sort -nr  
#通過這樣的方式,可以搜出以G或者T為單位的占用磁盤空間的大目錄,并排序

[root@k8s-master1 /]# du -h -d 1 /
194M	/boot
0	/dev
du: 無法訪問"/proc/24731/task/24731/fd/3": 沒有那個文件或目錄
du: 無法訪問"/proc/24731/task/24731/fdinfo/3": 沒有那個文件或目錄
du: 無法訪問"/proc/24731/fd/4": 沒有那個文件或目錄
du: 無法訪問"/proc/24731/fdinfo/4": 沒有那個文件或目錄
0	/proc
738M	/run
0	/sys
37M	/etc
1.6G	/root
51G	/var
6.2M	/tmp
3.2G	/usr
21M	/home
0	/media
0	/mnt
135M	/opt
0	/srv
0	/src
7.7G	/kuboard-data
64G	/

效率高的方法,使用find進行查找,比使用du效率要高

find / -type f -size +1G -exec du -h {} \;  #查找文件大于10G的文件

遇到問題

操作刪除了一些備份文件和日志信息后,查看空間仍然不足,發(fā)現(xiàn)刪除的日志,空間并沒有釋放。

未釋放磁盤空間的原因:

在Linux或者Unix系統(tǒng)中,通過rm或者文件管理器刪除文件將會從文件系統(tǒng)的文件夾結(jié)構(gòu)上解除鏈接(unlink),然而假設(shè)文件是被打開的(有一個進程正在使用),那么進程將仍然能夠讀取該文件,磁盤空間也一直被占用。而我刪除的是nginx的訪問日志文件,在刪除的時候該文件正在被使用。

處理辦法

[root@local ~]# lsof |grep deleted
nginx      4399      root   38w      REG              253,0   19304448   10835682 /var/nginx/logs/t-access.log (deleted)
nginx      4399      root   39w      REG              253,0    3502080   10835684 /var/nginx/logs/t-error.log (deleted)
nginx      4401    nobody   38w      REG              253,0   19304448   10835682 /var/nginx/logs/t-access.log (deleted)
nginx      4401    nobody   39w      REG              253,0    3502080   10835684 /var/nginx/logs/t-error.log (deleted)

從輸出的結(jié)果可以看到 /var/nginx/logs/t-access.log 和 t-error.log 還在被使用中,所以導(dǎo)致未釋放空間。

那么如何讓進程釋放呢?

  • 方法1:直接 kill 掉相應(yīng)的進程,或者停掉使用這個文件的應(yīng)用,讓操作系統(tǒng)自己主動回收磁盤空間。
  • 方法2:以后清理正在被讀寫的大日志文件時,直接使用 echo "" > xxx.log 命令,即直接將文件置空,并不影響服務(wù)的使用,文件大小也被控制下來,磁盤空間也釋放了

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論