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:
- Quais poderiam ser as possíveis causas?
- Como posso identificar melhor processos / aplicativos envolvidos?
- 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.