Apache devorando 2 GB de RAM

2

Eu tenho um servidor VPS de 1 GB rodando 12.0.4 no Ubuntu. Tudo funciona muito bem, na maioria das vezes meu uso de RAM mostra cerca de 700 MB. No entanto, a cada semana ou mais em tempo aleatório, o servidor fica sem memória e trava. Ele recupera e inicia todo o serviço, exceto o Mysql.

Eu descobri que não tenho memória swap, então eu crio um arquivo de swap de 256MB e o configuro. Ele funciona bem, mas ainda falha depois de 2 semanas.

Eu não sou especialista como você já descobriu. Então, eu quero alguma orientação sobre o porquê da operação normal, meu servidor está levando muita memória. Quer dizer, eu observo em um tempo diferente, é sempre em torno de 700-800MB de memória e carga é estável. Não há cron que corre à noite ou algo assim. Eu tenho par de wordpress blog , mas eles têm carga estável e nunca ver qualquer carga "em massa".

Eu tenho o Vesta Control Panel, e todos os relatórios são normais que eu conheço. Uma coisa que, no entanto, noto é que o Apache sempre mostra 1900MB de consumo de memória, onde o meu sistema no total tem menos memória. Eu tenho nginx instalado servidor web reverso [não sei o que isso significa por vesta fez isso por mim]. tudo o mais é bom, apenas o apache está o tempo todo em 1900MB. e parece que quando esse uso aumenta, falha o servidor.

Então, há uma maneira de reduzir esse uso do apache? O que mais é medida que devo fazer para tornar meu servidor estável com a carga atual.

EDITAR:

Com base na sugestão, aqui está minha configuração MPM

<IfModule mpm_prefork_module>
    StartServers          8
    MinSpareServers       5
    MaxSpareServers      20
    ServerLimit         256
    MaxClients          200
    MaxRequestsPerChild 4000
</IfModule>

e aqui está meu apache2ctl -l

Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  prefork.c
  http_core.c
  mod_so.c

Embora eu mencione antes, mas eu estou executando blogs baseados em Wordpress (PHP) no servidor, há Redmine (Ruby on Rail), assim que é executado usando Nginx e apache da mesma forma como outro site. Não, eu não uso python.

    
por Sumit Gupta 10.12.2014 / 12:22

2 respostas

5

Com o MPM do Preachek do Apache configurado com um ServerLimit de 256 que você configurou para um uso máximo de memória de aproximadamente 256 processos, aproximadamente 15-30 MB de memória cada em um módulo típico do Apache PHP5. Faça as contas e você sabe que vai explodir em um pequeno servidor com um grande número de clientes.

Em vez disso, configure-o com limites muito mais restritos. Por exemplo,

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    ServerLimit         25
    MaxClients          20
    MaxRequestsPerChild 4000
</IfModule>

Reinicie o Apache para usar a nova configuração MPM.

Isso fará com que o Apache comece com 5 processos, assegure que ele tenha 5 processos livres para novos clientes entrantes, encerre processos apenas se mais de 10 não forem usados e um limite rígido de 25. Ajuste às suas necessidades.

Alternativamente, veja a opção de usar o PHP-FPM ao invés do PHP como um módulo do Apache. Isso é muito mais eficiente e também a configuração padrão do Ubuntu 14.04. Por favor, note que você terá um pool de processos PHP separado e você não estará usando o Apache prefork MPM então (e a razão exata de porque é mais eficiente).

Basta ler a documentação normal do Ubuntu / Apache / PHP-FPM sobre como configurar tudo isso.

    
por gertvdijk 10.12.2014 / 13:14
1

Ter o mysql e o apache em um servidor é uma idéia ruim REAL. Quanto mais usuários você tem, mais acesso você tem ao banco de dados, que também usa cpu e mem para trabalhar, é claro. Então você diz ao apache para consultar e consultar, os usuários ficam impacientes, recarregam as páginas talvez, ainda mais consultas. Você sabe onde estou ficando certo? No seu caso, não é só o apaxe, mas o mysql, que precisa usar os mesmos recursos esparsos.

Eu lhe digo, não use um apache (canhão) para matar um pássaro (80 usuários). Ir nginx (-npm), mais leve, não consome tantos recursos.

A maioria das pessoas não entende que o apache REIVINDICA os recursos para POSSIBLE connect (daí a dica para diminuir isso)

Este programa é escrito para servir páginas a qualquer momento. Por isso, os recursos (mesmo que não haja conexões, mostrarão), os manterão vivos. Desculpe, eu não sou um falante nativo de inglês, então espero poder explicá-lo de uma maneira que você entenda. Versão curta 80 usuário e apache não correspondem em um pequeno vhost! Use o nginx, isso deve corrigir o seu problema, caso contrário, mova o banco de dados para outro servidor pequeno.

    
por s1mmel 13.05.2018 / 07:41