现象
有一个Linux主机,部署了Prometheus,但是基本每隔1个月,2T的磁盘就会被撑爆,通过df
和du
找不到占用空间大的文件。
对于这类情况,一般都是deleted的文件导致。
在Linux中,如果一个文件被删除但仍然被某个进程打开,那么在lsof
命令的输出中,该文件会显示为(deleted)
标记。这意味着虽然文件已被删除,但进程仍然在使用它。通常情况下,删除文件后,磁盘空间不会立即释放,直到所有打开文件描述符关闭或进程退出为止。
这种情况下,文件在文件系统中的目录项已被删除,但文件仍然存在于磁盘上,只是无法通过文件名访问。这种情况下,文件的数据不会被真正删除,直到所有使用该文件的进程关闭。
当一个文件被删除后,如果有进程仍然在使用该文件,系统会保持文件的内容不变,直到所有打开文件描述符都关闭。这样可以确保正在使用文件的进程不会因为文件突然消失而导致错误。
要释放已删除文件占用的磁盘空间,你可以通过以下步骤之一:
重启正在使用该文件的进程。
关闭正在使用该文件的进程。
找到并杀死使用已删除文件的进程。
对于第三种情况,你可以使用类似于以下命令的方式:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




