我想知道是否杀死删除进程,可以帮助清理内存缓存,有时我们从 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 中达到打开文件的限制。