Meu servidor está trocando, como posso consertá-lo?

1

Estou usando o hosting de 256MB do slicehost.com para o meu site.

Infelizmente, está trocando quase o tempo todo. Quando eu digito no console free eu recebo algo como:

            total       used       free     shared    buffers     cached
Mem:        251140     228968      22172          0        596      17356
-/+ buffers/cache:     211016      40124
Swap:       524284      60944     463340

Se eu reboot do servidor, a troca pára por um pouco e depois começa novamente.

Como posso:

1) descobrir quais processos / funções causam a troca

2) Como corrigir o problema

3) descobrir se 256MB é muito pouco e seu tempo para atualização em vez de otimização

obrigado

// usando o CakePHP / apache

    
por mgPePe 30.01.2012 / 12:48

7 respostas

6

1) Experimente ps aux e analise /proc/$pid/status e /proc/$pid/smaps

2) Adicione mais memória.

3) 256MB é claramente muito pouco, dada a sua carga atual.

    
por 30.01.2012 / 13:02
2

Você está usando o apache?

caso você esteja, faça o seguinte:

  • Abrir o topo (basta digitar top em um terminal)
  • Pressione o turno M para ordenar por consumo de memória
  • Na coluna RES, você pode ver a quantidade de memória que suas instâncias do apache reservam

Digamos que você esteja consumindo 20 Mb por processo.

Depois, faça uma matemática simples. coloque de lado 156Mb para o SO e divida os outros 100 pela quantidade de memória que um apache está consumindo: 100/20 = 5

Isso lhe dará quantos processos de apache você pode ter simultaneamente.

Em seguida, vá para a configuração do seu apache (/ etc / apache2) e encontre dentro do seu arquivo de configuração principal as seguintes configurações: - StartServers - ServerLimit - MaxClients

E defina todos eles para 5.

Tenha em mente que 256 é muito pequeno para uma configuração do Apache. Eu não usaria o apache com menos de 2 Gb de memória.

    
por 30.01.2012 / 16:50
2

Para diagnosticar quem está brigando, sugiro instalar no topo . Em cima mostrará as mudanças em um nível de processo. Para uma rápida demonstração, eu preparei o MySQL para usar toda a memória que ele tinha disponível, então trabalhei com alguns arquivos grandes para forçar a memória do MySQL a ser trocada em favor do cache dos meus arquivos de teste grandes. Abaixo está uma captura de tela mostrando o MySQL tentando ler a memória de volta do swap (imagem em vez de texto para que você possa ver os destaques).

Observe os números majflt e minflt quando o MySQL tenta acessar algo que foi trocado. Você também pode ver outras estatísticas de memória, e realmente qualquer coisa que você gostaria de obter de cima, ps, etc. {apt-get, yum} instalar no topo .

    
por 30.01.2012 / 18:19
1
  1. É PHP.

  2. Adicione mais memória ou reduza o número de processos PHP simultâneos

  3. Não é muito.

por 30.01.2012 / 13:16
1

Você pode diminuir o swappiness, primeiro verificar o valor atual com cat / proc / sys / vm / swappiness e depois alterar o valor sysctl -w vm.swappiness = 10

Além disso, você pode sempre desabilitar a troca com sudo swapoff a ou editar / etc / fstab

Hoje em dia eu raramente uso swap, mesmo em pequenas máquinas virtuais como a sua.

    
por 30.01.2012 / 17:31
1

Você pode fazer com que o Apache use menos memória, mas não será fácil.

  • Desative serviços não essenciais no seu servidor.
  • Use o módulo MPM do trabalhador com o PHP como FastCGI (ele é incompatível com o PHP como um módulo ).
  • Configure o módulo de trabalho para usar um número moderado de MaxClients (por exemplo, MaxClients 64 ) e um número moderado de threads (por exemplo, ThreadsPerChild 32 ).
por 30.01.2012 / 18:04
0
  1. Por que você não tenta descobrir quais processos estão consumindo a quantidade de memória quando a troca pesada ocorre ao emitir

    topo

  2. Depois de descobrir qual processo está levando a boa parte da memória, deve ser o primeiro passo de como corrigir o problema. por exemplo. se a consulta do mysql estiver ocupando muita memória, talvez você decida limitar a memória do servidor mysql ou talvez você faça uma otimização de consulta

  3. bem 256MB é realmente parece pequeno. Desde que você mencionou o apache e eu sei que o apache, por padrão, vem com o modo prefork de operação, ele pode ser o verdadeiro culpado. Considere executar o apache no modo de trabalho com apenas os módulos necessários iniciados (geralmente o apache vem com vários módulos iniciados automaticamente) ou substituindo o apache completamente pelo Nginx leve.

por 30.01.2012 / 12:59