暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Prometheus数据文件句柄未释放,磁盘空间飙升问题解决方案

DB宝 2024-04-22
944

现象

有一个Linux主机,部署了Prometheus,但是基本每隔1个月,2T的磁盘就会被撑爆,通过df
du
找不到占用空间大的文件。

对于这类情况,一般都是deleted的文件导致。

在Linux中,如果一个文件被删除但仍然被某个进程打开,那么在lsof
命令的输出中,该文件会显示为(deleted)
标记。这意味着虽然文件已被删除,但进程仍然在使用它。通常情况下,删除文件后,磁盘空间不会立即释放,直到所有打开文件描述符关闭或进程退出为止。

这种情况下,文件在文件系统中的目录项已被删除,但文件仍然存在于磁盘上,只是无法通过文件名访问。这种情况下,文件的数据不会被真正删除,直到所有使用该文件的进程关闭。

当一个文件被删除后,如果有进程仍然在使用该文件,系统会保持文件的内容不变,直到所有打开文件描述符都关闭。这样可以确保正在使用文件的进程不会因为文件突然消失而导致错误。

要释放已删除文件占用的磁盘空间,你可以通过以下步骤之一:

  1. 重启正在使用该文件的进程。

  2. 关闭正在使用该文件的进程。

  3. 找到并杀死使用已删除文件的进程。

对于第三种情况,你可以使用类似于以下命令的方式:

1lsof | grep delete | 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     0   64M   0% /dev
5shm                       64M     0   64M   0% /dev/shm
6/dev/mapper/centos-root  2.0T  1.2T  772G  62% /etc/hosts
7tmpfs                    4.0M     0  4.0M   0% /sys/fs/cgroup
8tmpfs                     16G   33M   16G   1% /run
9tmpfs                    3.2G     0  3.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,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
16prometheu    161              root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
17prometheu    161    205       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
18prometheu    161    205       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
19prometheu    161    206       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
20prometheu    161    206       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
21prometheu    161    207       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
22prometheu    161    207       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
23prometheu    161    208       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
24prometheu    161    208       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
25prometheu    161    210       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
26prometheu    161    210       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
27prometheu    161    211       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
28prometheu    161    211       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
29prometheu    161    212       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
30prometheu    161    212       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
31prometheu    161    213       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
32prometheu    161    213       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
33prometheu    161    214       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
34prometheu    161    214       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
35prometheu    161    215       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
36prometheu    161    215       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
37prometheu    161    228       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
38prometheu    161    228       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
39prometheu    161    233       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
40prometheu    161    233       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
41prometheu    161    234       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
42prometheu    161    234       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
43prometheu    161    235       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
44prometheu    161    235       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
45prometheu    161    236       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
46prometheu    161    236       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
47prometheu    161    237       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
48prometheu    161    237       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
49prometheu    161    238       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
50prometheu    161    238       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
51prometheu    161    263       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
52prometheu    161    263       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
53prometheu    161    264       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
54prometheu    161    264       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
55prometheu    161    265       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
56prometheu    161    265       root  746r      REG               0,45   6101881 2214610318 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/index (deleted)
57prometheu    161 106397       root  745r      REG               0,45 129790352 2231413562 /data/01HVSWSDRV4ZNQRBP9GY1XDPH7/chunks/000001 (deleted)
58prometheu    161 106397       root  746r      REG               0,45   6101881 2214610318 /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     0   64M   0% /dev
6shm                       64M     0   64M   0% /dev/shm
7/dev/mapper/centos-root  2.0T  1.2T  772G  62% /etc/hosts
8tmpfs                    4.0M     0  4.0M   0% /sys/fs/cgroup
9tmpfs                     16G   33M   16G   1% /run
10tmpfs                    3.2G     0  3.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     0   64M   0% /dev
16shm                       64M     0   64M   0% /dev/shm
17/dev/mapper/centos-root  2.0T  1.1T  871G  57% /etc/hosts
18tmpfs                    4.0M     0  4.0M   0% /sys/fs/cgroup
19tmpfs                     16G   33M   16G   1% /run
20tmpfs                    3.2G     0  3.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     0   64M   0% /dev
25shm                       64M     0   64M   0% /dev/shm
26/dev/mapper/centos-root  2.0T  803G  1.2T  41% /etc/hosts
27tmpfs                    4.0M     0  4.0M   0% /sys/fs/cgroup
28tmpfs                     16G   33M   16G   1% /run
29tmpfs                    3.2G     0  3.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     0   64M   0% /dev
35shm                       64M     0   64M   0% /dev/shm
36/dev/mapper/centos-root  2.0T  489G  1.5T  25% /etc/hosts
37tmpfs                    4.0M     0  4.0M   0% /sys/fs/cgroup
38tmpfs                     16G   33M   16G   1% /run
39tmpfs                    3.2G     0  3.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导致。有懂的朋友可以留言,共同进步。


文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论