Se esgotando o espaço de troca em servidores web, o que fazer?

7

Eu tenho 2 servidores da Web LAMP que estão ficando sem espaço de troca rotineiramente (veja a captura de tela superior anexada).

As configurações do Apache são as seguintes:

<IfModule prefork.c>
StartServers       64
MinSpareServers    64
MaxSpareServers    128
ServerLimit        256
MaxClients         256
MaxRequestsPerChild  4096
</IfModule>

Os limites de recursos no PHP são:

max_execution_time = 30
max_input_time = 30
memory_limit = 80M

Sou novo em coisas de administração de servidores como este (sou desenvolvedor); O que posso ajustar para evitar a troca?

Aqui está uma captura de tela da parte superior de um dos servidores ao travar:

    
por mmattax 06.02.2010 / 14:27

3 respostas

7

Você está ficando sem swap porque está usando toda a sua RAM e mais alguma. Você tem um problema sério que precisa corrigir agora.

Você tem duas opções: ignorar a causa e apenas adicionar mais memória RAM ou direcionar o problema do que realmente está comendo sua memória.

Adicionar RAM é bastante barato e bastante fácil se for o seu servidor, mas é uma correção temporária e, se for um VPS ou um servidor alugado, não é tão barato. Vamos resolver o problema da raiz. O que está sugando muita memória? Aqui estão algumas dicas:

  • Desative o InnoDB (a menos que seja necessário) no MySQL
  • Beat Apache (e MySQL) com o Stick de Configuração +5
  • Considere um httpd menor como cherokee, lighttpd ou nginx (eles são realmente rápidos e quase não comem RAM). A principal desvantagem é que você não pode usar .htaccess arquivos, mas você pode codificar em sua funcionalidade.
  • Você está usando um cache de código OP para PHP? Tente desligá-lo ou mudar para outro mais eficiente.

Em termos de apenas trocar itens de volta para RAM real, você pode fazer isso por:

swapoff -a && swapon -a

Mas não tente quando tiver menos memória livre do que troca de coisas. Ele irá travar seu servidor.

    
por 06.02.2010 / 14:38
1

Para uma mudança rápida, faça o seguinte:

"MaxRequestsPerChild 4096" para algo como: 700 ajudará. Quanto mais tempo um processo apache viver, mais memória residente vai consumir devido a mod_php e afins. Além disso, ative o keepalive e faça configurações de tempo limite agressivas para ele:

KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 5

Isso permitirá que cada solicitação de página do cliente use um processo apache para lidar com todas as solicitações em que ele usaria vários processos do apache. Isso reduzirá a quantidade de processos do apache em execução a qualquer momento.

Para memória ideal e solicitações por segundo:

Afaste-se de mod_php e use fastcgi ou outro servidor de aplicativos. Os processos do Apache consomem uma quantidade insignificante de memória quando as páginas php são atendidas pelo fastcgi. Sem mencionar que o fastcgi pode manter conexões persistentes com seu servidor dbase, entre outras coisas.

    
por 08.02.2010 / 06:29
0

que tal mudar a veiculação de conteúdo estático para servidor mais adequado ?

    
por 06.02.2010 / 14:47