Quem come todos os meus descritores de arquivos e, portanto, memória?

6

meu sistema atual: 14.04.4 LTS (GNU / Linux 3.13.0-85-genérico 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

Por alguns meses (e um número de atualizações) eu tenho o problema que, de repente, depois de alguns dias trabalhando com minha caixa (e suspendendo diariamente) o uso da memória e o número de descritores de arquivos alocados é disparado. / p>

De repente, a memória "comprometida" aumenta, até cerca de 120 - 160 GB (!). Normalmente este valor fica em torno da minha RAM física. Outro sintoma é que toda a minha troca de RAM + está esgotada. O resultado é um sistema inutilizável. Por enquanto eu só poderia consertar essa situação, reiniciando. Matar quase todos os processos depois de desligar o X não ajudou a liberar o valor comprometido.

Um indicador strong parece ser o valor exageradamente alto do contador de arquivos abertos em / proc / sys / fs / file-nr - isso sobe acima de 2 milhões. Ultimamente eu tentei limitar isso para 1624594, mas o único resultado é (é claro) que eu não fique sem memória, mas sim fora dos FDs.

Tendo Munin no lugar, posso ver uma strong correlação temporal entre os FDs e o uso da memória.

Eu tenho alguns compartilhamentos CIFS montados e meu usuário tem seu gvfsd-fuse. O FS raiz é ext4.

Os resultados de lsof e traversing / proc / list apenas 10% de / proc / sys / fs / file-nr.

Eu suspeitava que o MTP fosse a causa (quando eu conecto meu telefone Motorola), mas recentemente isso aconteceu sem ter usado o MTP desde a última reinicialização.

Sidenote: eu tenho drivers radeon para vídeo:

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  

UPDATE

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

Como posso descobrir o que está comendo todos esses FDs e minha memória?

    
por mdo 27.06.2016 / 09:47

1 resposta

2

Isso mostrará o número de arquivos abertos por ID do processo:

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

(salve e execute com sudo ).

Em seguida, você pode rastrear a que esse ID de processo pertence.

    
por Rinzwind 27.06.2016 / 10:16

Tags