杀死已删除的文件并清理内存缓存

杀死已删除的文件并清理内存缓存

我想知道是否杀死删除进程,可以帮助清理内存缓存,有时我们从 lsof 许多已删除的文件中得到,那么杀死它们是否可以提供更多可用内存?

例子:

lsof | grep delete
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/42/gvfs
      Output information may be incomplete.


cupsd      1619                  root   10r      REG              253,0      2979   38250477 /etc/passwd+ (deleted)
gnome-set  5731                   gdm   14r      REG              253,0     65536   51102558 /etc/pki/nssdb/cert8.db;5c644c01 (deleted)
gnome-set  5731                   gdm   16r      REG              253,0     16384   51197440 /etc/pki/nssdb/key3.db;5c644c01 (deleted)
pool       5731  5795             gdm   14r      REG              253,0     65536   51102558 /etc/pki/nssdb/cert8.db;5c644c01 (deleted)

kill 1619

我们担心删除的进程是否会消耗内存

我们还可以看到以下内容:

lsof | grep deleted | wc -l 
3421

答案1

通常进程会明确地创建和打开文件并直接删除它们,以便更安全地使用文件,并确保进程结束时文件被删除。

简而言之,这是一个特点;尤其是您在问题中显示的文件。终止这些进程会扰乱系统的工作。

在某些情况下,已删除的文件仍然打开可能是一个错误(例如,进程正在写入日志文件,但日志文件被压缩并删除,而没有向进程发出重新打开日志文件的信号)。您可以通过/proc/文件系统截断此类文件:如上所示找到文件描述符编号lsof,然后执行> /proc/12345/fd/123截断文件的操作(12345 是进程 ID,123 是文件描述符编号。不过,这种情况很少需要。

请注意,进程并未被删除,仅引用这些文件的目录条目已被删除。

答案2

根据您使用的软件/解决方案,您必须定义已知/可接受的基线。

如果已删除的文件没有随着时间的推移以显着的速度增长,我不会痴迷于系统上仍然打开/存在的已删除文件。现在,如果您与系统/虚拟机的正常基线存在显着偏差,则可能需要担心。

我们最近发现了一些软件供应商常见的系统,其中我们与基线存在大约 20-50K 已删除文件的偏差; lsof 大约需要 5 分钟才能完成,而且我们的磁盘空间已经耗尽。

最终,我们发现供应商一定开发了一些 Java 例程,他在其中打开临时文件并删除它们没有关闭它们。我们向供应商提交了一个错误,查明了可疑文件,他更正了代码。我们还向客户和供应商指出,该解决方案可能会在数据分区较大的 Linux 中达到打开文件的限制。

相关内容