RAM livre desaparece - vazamento de memória?

11

Em um novo sistema iniciado, free informa sobre 1.5G de RAM usada (8G RAM no total, Ubuntu 12.04 com desktop lightdm e plasma, uma janela konsole iniciada). Tendo os aplicativos em execução eu uso, ele ainda consome não mais que 2G. No entanto, tendo o sistema rodando por alguns dias, mais e mais RAM livre desaparece - sem aparecer na lista de aplicativos usados: enquanto smem --pie=name reporta menos de 20% usado (e 80% disponível), tudo o mais diz de forma diferente. free -m , por exemplo, informa sobre o dia 7:

             total       used       free     shared    buffers     cached
Mem:          7459       7013        446          0        178        997
-/+ buffers/cache:       5836       1623
Swap:         9536        296       9240

(assim você pode ver, não são os buffers ou o cache). Hoje isso finalmente terminou com o sistema travando completamente: o gerenciador de janelas se foi, os aplicativos "pendurados no ar" (sem moldura) - e um popup me notificando sobre "muitos arquivos abertos". Relatórios de syslog:

kernel: [856738.020829] VFS: file-max limit 752838 reached

Então fechei os aplicativos que consegui fechar e matei X usando Ctrl-Alt-backspace. X tentou subir novamente depois disso com o failsafeX, mas foi incapaz de fazê-lo, já que não podia mais detectar sua configuração. Então eu mudei para um console usando Ctrl-Alt-F2, capturei todas as informações que pude pensar (vmstat, free, smem, proc/meminfo , lsof, ps aux ) e finalmente reinicializei. X novamente surgiu com o failsafeX; desta vez eu disse para "recuperar da minha configuração de backup", depois mudei para um console e usei com sucesso o startx para trazer o ambiente gráfico.

Eu não tenho nenhuma pista real sobre o que está causando esse problema - embora tenha que ser feito com o próprio X ou com alguns processos do usuário em execução no X - como depois de matar o X, a saída free -m ficou assim:

             total       used       free     shared    buffers     cached
Mem:          7459       2677       4781          0         62        419
-/+ buffers/cache:       2195       5263
Swap:         9536         59       9477

(~ 3,5 GB sendo liberado) - para comparar com a saída após um novo começo:

             total       used       free     shared    buffers     cached
Mem:          7459       1483       5975          0         63        730
-/+ buffers/cache:        689       6769
Swap:         9536          0       9536

Mais duas saídas úteis são fornecidas por memstat -u . Pouco antes do acidente:

User     Count     Swap      USS      PSS      RSS
mail         1        0      200      207      616
whoopsie     1      764      740      817     2300
colord       1     3200      836      894     2156
root        62    70404   352996   382260   569920
izzy        80   177508  1465416  1519266  1851840

Depois de ter X morto:

User     Count     Swap      USS      PSS      RSS
mail         1        0      184      188      356
izzy         1     1400      708      739     1080
whoopsie     1      848      668      826     1772
colord       1     3204      804      888     1728
root        62    54876   131708   149950   267860

E depois de um reinício, volte ao X:

User     Count     Swap      USS      PSS      RSS
mail         1        0      212      217      628
whoopsie     1        0     1536     1880     5096
colord       1        0     3740     4217     7936
root        54        0   148668   180911   345132
izzy        47        0   370928   437562   915056

Edit: Acabei de adicionar dois gráficos do meu sistema de monitoramento. Interessante de se ver: toda vez que há um "salto" no consumo de memória, o CPU também aumenta. Acabei de encontrar isso agora - e isso me lembra de outro indicador que aponta para o próprio X: Muitas vezes, quando voltando para a minha máquina e desbloqueando a tela, eu encontrei algo fazendo um trabalho pesado na minha CPU. Verificando com top , sempre foi /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none .

Então, depois dessa longa explicação, finalmente minhas perguntas:

  1. Quais poderiam ser as possíveis causas?
  2. Como posso identificar melhor processos / aplicativos envolvidos?
  3. Quais etapas poderiam ser tomadas para evitar esse comportamento - não reiniciar a máquina todos os X dias?

Eu estava rodando 8.04 (Hardy) por cerca de 5 anos na minha máquina antiga, nunca tendo experimentado o mesmo (sempre com mais de 100 dias de atividade, antes de reinicializar para, por exemplo, atualizações do kernel). Esta agora é uma nova máquina completa com uma nova instalação de 12.04 . Caso seja importante, algumas especificações:

APU AMD A4-3400 com Radeon (tm) HD Graphics, usando o driver open-source ati / radeon (sem fglrx instalado), 8GB de RAM, WDC WD1002FAX-0 hdd (1TB), placa-mãe Asus F1A75-V Evo . Ubuntu 12.04 64 bits com KDE4 / Plasma. Os aplicativos normalmente abertos incluem mais ou menos permanentemente o Evolution, o Firefox, o Konsole (com o Midnight Commander rodando dentro, cerca de 4 guias) e o LibreOffice - e ocasionalmente o Caliber, Gimp e Moneyplex (software bancário que já uso há quase 20 anos, em uma versão que fez bem em Hardy).

Editar: Hoje encontrei um dos "caras malvados": o KDE4s plasma-desktop. A memória usada foi novamente de até 5 GB, quando eu fiz um killall plasma-desktop && plasma-desktop . Isso liberou 1,3 GB de RAM! ps diz:

                             RSS    SIZE   VSZ
plasma usage before restart  120988 526472 1300816
plasma usage after restart   92352  495972 1263632

Então onde estão esses 1.3GB? A diferença entre esses valores, se somados, é de 96 MB - não 1,3 GB.

E isso só pode ser uma parte, como ainda 3.7GB estão em uso (deve ser inferior a 2GB). Eu monitorei isso durante os últimos 6 dias usando várias ferramentas: a memória usada (não falando sobre cache e buffers) aumenta lentamente, mas de forma constante. Mesmo que eu não esteja na minha mesa para executar alguma coisa ...

Quanto ao monitoramento de processos com arquivos abertos, eu atualmente uso o seguinte 1-liner (eu amo shell e especialmente bash) para obter o top-5:

echo "$(for pid in $(ls -a /proc|egrep '^([0-9])*$'|sort -n 2>/dev/null); do \
if [ -e /proc/$pid/fd ]; then FHC=$(ls -l /proc/$pid/fd|wc -l); \
if [ $FHC -gt 0 ]; then PNAME="$(cat /proc/$pid/comm)"; \
echo "$FHC files opened by $pid ($PNAME)"; fi; fi; done)"|sort -r -n|head -n5

Comande aqui em 4 linhas para melhor legibilidade. Nada ainda a partir daí - exceto que o Skype não gosta de ter a conexão com a Internet quebrada. Cada desconexão causa um ligeiro aumento de seus arquivos abertos, mas nada dramático. Por outro lado, parece que o plasma também é responsável por isso:

Veja a queda de identificadores de arquivo no final? Essa foi a reinicialização do plasma.

    
por Izzy 01.07.2012 / 00:02

2 respostas

6
  1. O grande número de arquivos abertos é uma boa pista de que algo está errado. Meu palpite seria algum daemon do sistema KDE.

  2. Abra um console e execute "top". Em seguida, use < e > para alterar a coluna de classificação para VIRT ou RES e ver quais programas estão usando mais memória. Um vazamento de memória aparecerá como um uso massivo de memória virtual, pois assim que o ponteiro para a memória vazada for perdido, ele não será usado e será desativado. Também execute "lsof" e procure por um processo com muitos arquivos abertos, já que isso parece ser realmente um vazamento de descritor de arquivo.

  3. Rastreie o programa e relate um bug.

por Alistair Buxton 01.07.2012 / 00:33
0

Eu acho que isso é um comportamento normal do sistema. Muito provavelmente tudo está bem.

Você pode ler este artigo brilhante (linux ate my ram) para entender como o Linux está gerenciando seu ram e por que não precisa se preocupar:

link

    
por gemue2010 01.07.2012 / 06:00