當前位置: 妍妍網 > 碼農

Prometheus數據檔控制代碼未釋放,磁盤空間飆升問題解決方案

2024-04-19碼農

現象

有一個Linux主機,部署了Prometheus,但是基本每隔1個月,2T的磁盤就會被撐爆,透過 df du 找不到占用空間大的檔。

對於這類情況,一般都是deleted的檔導致。

在Linux中,如果一個檔被刪除但仍然被某個行程開啟,那麽在 lsof 命令的輸出中,該檔會顯示為 (deleted) 標記。這意味著雖然檔已被刪除,但行程仍然在使用它。通常情況下,刪除檔後,磁盤空間不會立即釋放,直到所有開啟檔描述符關閉或行程結束為止。

這種情況下,檔在檔案系統中的目錄項已被刪除,但檔仍然存在於磁盤上,只是無法透過檔名存取。這種情況下,檔的數據不會被真正刪除,直到所有使用該檔的行程關閉。

當一個檔被刪除後,如果有行程仍然在使用該檔,系統會保持檔的內容不變,直到所有開啟檔描述符都關閉。這樣可以確保正在使用檔的行程不會因為檔突然消失而導致錯誤。

要釋放已刪除檔占用的磁盤空間,你可以透過以下步驟之一:

  1. 重新開機正在使用該檔的行程。

  2. 關閉正在使用該檔的行程。

  3. 找到並殺死使用已刪除檔的行程。

對於第三種情況,你可以使用類似於以下命令的方式:

1lsof | grepdelete | awk '{print $2}' | sort -u | xargs -I {} kill -9 {}

這將尋找所有正在使用已刪除檔的行程並將它們殺死,從而釋放被刪除檔占用的磁盤空間。

排查

1[root@lhrprometheus /]# df -h
2Filesystem Size Used Avail Use% Mounted on
3overlay 2.0T 1.2T 772G 62% /
4tmpfs 64M 064M 0% /dev
5shm 64M 064M 0% /dev/shm
6/dev/mapper/centos-root 2.0T 1.2T 772G 62% /etc/hosts
7tmpfs 4.0M 04.0M 0% /sys/fs/cgroup
8tmpfs 16G 33M 16G 1% /run
9tmpfs 3.2G 03.2G 0% /run/user/0
10[root@lhrprometheus /]# lsof | grep delete | wc -l
1144
12[root@lhrprometheus /]# lsof | grep delete | wc -l
1344
14[root@lhrprometheus /]# lsof | grep delete 
15prometheu 161 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
16prometheu 161 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
17prometheu 161205 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
18prometheu 161205 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
19prometheu 161206 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
20prometheu 161206 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
21prometheu 161207 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
22prometheu 161207 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
23prometheu 161208 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
24prometheu 161208 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
25prometheu 161210 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
26prometheu 161210 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
27prometheu 161211 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
28prometheu 161211 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
29prometheu 161212 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
30prometheu 161212 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
31prometheu 161213 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
32prometheu 161213 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
33prometheu 161214 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
34prometheu 161214 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
35prometheu 161215 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
36prometheu 161215 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
37prometheu 161228 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
38prometheu 161228 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
39prometheu 161233 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
40prometheu 161233 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
41prometheu 161234 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
42prometheu 161234 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
43prometheu 161235 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
44prometheu 161235 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
45prometheu 161236 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
46prometheu 161236 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
47prometheu 161237 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
48prometheu 161237 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
49prometheu 161238 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
50prometheu 161238 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
51prometheu 161263 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
52prometheu 161263 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
53prometheu 161264 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
54prometheu 161264 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
55prometheu 161265 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
56prometheu 161265 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
57prometheu 161106397 root 745r REG 0,451297903522231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
58prometheu 161106397 root 746r REG 0,4561018812214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)

解決

直接殺掉父行程:

1[root@lhrprometheus /]# kill -9 161
2[root@lhrprometheus /]# df -h
3Filesystem Size Used Avail Use% Mounted on
4overlay 2.0T 1.2T 772G 62% /
5tmpfs 64M 064M 0% /dev
6shm 64M 064M 0% /dev/shm
7/dev/mapper/centos-root 2.0T 1.2T 772G 62% /etc/hosts
8tmpfs 4.0M 04.0M 0% /sys/fs/cgroup
9tmpfs 16G 33M 16G 1% /run
10tmpfs 3.2G 03.2G 0% /run/user/0
11
12[root@lhrprometheus /]# df -h
13Filesystem Size Used Avail Use% Mounted on
14overlay 2.0T 1.1T 871G 57% /
15tmpfs 64M 064M 0% /dev
16shm 64M 064M 0% /dev/shm
17/dev/mapper/centos-root 2.0T 1.1T 871G 57% /etc/hosts
18tmpfs 4.0M 04.0M 0% /sys/fs/cgroup
19tmpfs 16G 33M 16G 1% /run
20tmpfs 3.2G 03.2G 0% /run/user/0
21[root@lhrprometheus /]# df -h
22Filesystem Size Used Avail Use% Mounted on
23overlay 2.0T 803G 1.2T 41% /
24tmpfs 64M 064M 0% /dev
25shm 64M 064M 0% /dev/shm
26/dev/mapper/centos-root 2.0T 803G 1.2T 41% /etc/hosts
27tmpfs 4.0M 04.0M 0% /sys/fs/cgroup
28tmpfs 16G 33M 16G 1% /run
29tmpfs 3.2G 03.2G 0% /run/user/0
30
31[root@lhrprometheus /]# df -h
32Filesystem Size Used Avail Use% Mounted on
33overlay 2.0T 489G 1.5T 25% /
34tmpfs 64M 064M 0% /dev
35shm 64M 064M 0% /dev/shm
36/dev/mapper/centos-root 2.0T 489G 1.5T 25% /etc/hosts
37tmpfs 4.0M 04.0M 0% /sys/fs/cgroup
38tmpfs 16G 33M 16G 1% /run
39tmpfs 3.2G 03.2G 0% /run/user/0

可以看到,磁盤空間自動釋放掉了。

定時刪除

1cat > /root/kill_deleted_files_processes.sh <<"EOF"
2#!/bin/bash
3
4# 尋找所有使用已刪除檔的行程,並殺死它們
5lsof | grep delete | awk '{print $2}' | sort -u | xargs -I {} kill-9 {}
6
7# 可選:輸出被殺死的行程資訊
8echo "Killed processes:"
9
10EOF
11
12
13
14chmod +x /root/kill_deleted_files_processes.sh
15
16
17crontab -l
180 * * * * /root/kill_deleted_files_processes.sh

總結

1、對於這類情況,可以考慮寫定時任務殺行程。

2、目前沒深入查詢是否是prometheus的bug導致。有懂的朋友可以留言,共同進步。