谁吃掉了我所有的文件描述符和内存?

mdo*_*mdo 6 swap ram lsof

我当前的系统:14.04.4 LTS (GNU/Linux 3.13.0-85-generic x86_64)

$ free
             total       used       free     shared    buffers     cached 
Mem:      16366288   16090588     275700    4047472    1019652  5253144
-/+ buffers/cache:    9817792    6548496 Swap:      7813116    7308592     504524



$ cat /proc/sys/fs/file-nr
1196103  0   1624594
Run Code Online (Sandbox Code Playgroud)

几个月来(以及多次更新),我遇到了一个问题,即在使用我的机器几天后(每天暂停它)内存使用量和分配的文件描述符数量突然激增。

突然间,“提交的”内存上升到大约 120 - 160 GB(!)。通常这个值位于我的物理 RAM 周围。另一个症状是我所有的 RAM + 交换都用完了。结果是一个无法使用的系统。目前我只能通过重新启动来解决这种情况。在关闭 X 后杀死几乎所有进程无助于释放提交的值。

一个强有力的指标似乎是 /proc/sys/fs/file-nr 中打开文件计数器的不合理的高值——它超过了 200 万。最近我试图将其限制为 1624594,但唯一的结果是(当然)我没有用完内存,而是用完了 FD。

有了 Munin,我可以看到 FD 和内存使用情况之间存在很强的时间相关性。

我安装了一些 CIFS 共享,我的用户有它的 gvfsd-fuse。根 FS 是 ext4。

lsof遍历 /proc/的结果只列出了 /proc/sys/fs/file-nr 的 10% 左右。

我怀疑 MTP 是原因(当我插入我的摩托罗拉手机时),但最近发生了这种情况,自上次重启以来没有使用过 MTP。

旁注:我有用于视频的 radeon 驱动程序:

ii  libdrm-radeon1:amd64                                        2.4.64-1~ubuntu14.04.1                        
ii  libdrm-radeon1:i386                                         2.4.64-1~ubuntu14.04.1                        
ii  radeontool                                                  1.6.3-1                                       
ii  xserver-xorg-video-radeon                                   1:7.3.0-1ubuntu3.1  
Run Code Online (Sandbox Code Playgroud)

更新

root:/proc$ (echo -n "0" ; for processid in [0-9]*; do echo -n "+$(ls /proc/$processid/fd/ | wc -l)"; done;echo)|bc
2597
root:/proc$ lsof -n|wc -l
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
84504
root:/proc$ sudo -u mdo lsof -n|wc -l
72170
Run Code Online (Sandbox Code Playgroud)

我怎样才能找出是什么在吃掉所有这些 FD 和我的记忆?

Rin*_*ind 4

这将显示每个进程 ID 打开的文件数:

cd /proc
for processid in [0-9]*
do
    echo "Process ID = $processid: $(ls /proc/$processid/fd/ | wc -l) file descriptors"
done
Run Code Online (Sandbox Code Playgroud)

(保存并使用 执行sudo)。

然后您可以追踪该进程 ID 属于什么。