Além do cache, para que serve o kernel do Linux quantidades significativas de memória?

7

Meu computador parece muito lento. De acordo com free , tenho apenas ~ 200M de RAM sobrando e mais de um gigabyte teve que ser trocado. Eu sei que é bom se a memória é usada para armazenar em cache, mas isso parece que estou realmente com pouca memória RAM.

root@desktop:/proc free -h
               total       used        free      shared  buff/cache   available
Mem:           3.9G        3.4G        132M         44M        378M        213M
Swap:          8.0G        1.2G        6.7G

smem -tk informa que no máximo 2GiB (coluna RSS) são usados pelos aplicativos. smem -wk considera toda a memória usada. Aparentemente, o kernel usa 1.8GiB não para armazenamento em cache:

root@desktop:/proc smem -wk
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory          1.9G      74.3M       1.8G 
userspace memory               1.8G     250.9M       1.6G 
free memory                  173.9M     173.9M          0 

Esse comportamento é esperado e, se sim, para qual tarefa o kernel precisa de tanta memória?

    
por Erik 11.04.2015 / 16:37

2 respostas

1

Você também pode tentar isso:

Use o sar para relatar sobre os interruptores de contexto e o uso irq ao longo do tempo. O Sar é uma excelente ferramenta de monitoramento de sistemas, mas sem monitoramento. Execute-o por um dia e, em seguida, use vários relatórios para procurar estranheza.

Etapas:

Instale o pacote sysstat. Configure o cron job (verifique /etc/cron.d/ para ver se tal arquivo existe) assim:

* * * * * root /usr/lib64/sa/sa1 -S XALL 10 6

Isto irá criar muitos dados - cerca de 300 MB por dia. Será necessário um instantâneo das estatísticas do sistema a cada 6 segundos . (Você pode diminuir a freqüência para duas vezes por minuto alterando "10 6" para "2 30")

Se você alterar a frequência de captura, deverá apagar o arquivo do dia em /var/log/sa/sa$(date +%d) - caso contrário, os relatórios poderão ficar corrompidos.

OK, depois de ter capturado seus dados, tente estes (Dica: sempre canalizar através de less ):

sar -q

Para obter as médias de carga e os tamanhos das filas de execução. Se estes são baixos, então olhe os tempos de espera do IO:

sar -P ALL

Se você não encontrar saltos em% iowait ou vales em% ocioso, então confira as opções de contexto:

saw -w

500 context-switches por segundo são bastante normais em um sistema mais ocioso.

Você pode limitar os relatórios do sar especificando o arquivo de atividades, fornecendo um horário de início e término ( -s <hh:mm:ss> e -e <hh:mm:sss> respectivamente) e, opcionalmente, um intervalo com -i <secs> (deve ser maior que sua resolução de captura configurado pelo cron job).

Exemplo:

sar -f /var/log/sa/sa$(date +%d -d yesterday) -s 09:15:00 -e 12:15:00 -i 600

fornecerá informações resumidas para a CPU em intervalos de 10 minutos de ontem entre 9:15 e 12:15.

Há mais ... muito mais. Você pode fazer man sar para obter essa informação.

    
por 15.04.2015 / 11:59
0

Eu não sei porque você editou o comando free -h output que não possui a linha -/+ buffers/cache - o que é importante. De qualquer forma, podemos prosseguir.

Desde que a coluna 'Livre' (na linha Mem:) seja > 0, você não está realmente com pouca memória RAM, pois isso é RAM não usada . E o Linux é bem conhecido por usar toda a RAM que pode obter (como caches, esperando por um melhor desempenho).

A parte de swap não diz toda a verdade: é muito comum ter muitos códigos + dados trocados para o disco, porque ele foi executado apenas uma vez e não foi usado por um tempo. Outra parte em que o Linux mostra que ele é ávido por desempenho na RAM: ele rapidamente tira o que provavelmente não é importante (mais uma vez, desempenho-sábio). É sintonizável (sysctl vm.swappiness), mas a maioria dos padrões de distribuição é "não hesite em trocar".

O que é importante para confirmar sua hipótese (lenta porque falta de RAM disponível) é se ela está atualmente sendo trocada para o disco. Na maioria das vezes é muito fácil correlacionar sluginess a um disco piscando freneticamente em seu computador. Caso contrário, execute top e analise a evolução dos números de swap ao longo do tempo. Ainda mais fácil, vmstat 1 irá imprimir diretamente os números de IO do swap a cada segundo (swap si / so).

    
por 12.04.2015 / 17:29