Gerenciamento de memória LAMP (CentOS)

3
Em primeiro lugar, devo dizer que não sou especialista em administração de servidores. Eu tenho feito programação web por mais de 10 anos em diversas plataformas, mas na maioria das vezes chego a uma situação de ready-ready onde há profissionais de TI ou uma boa empresa de hospedagem envolvida.

Agora estou finalmente em um ponto em que fui solicitado a criar uma instalação do LAMP a partir do zero (com apenas uma instalação do CentOS) para servir uma configuração bastante intensa do Wordpress.

Tudo correu bem como eu tenho andado por aí com administração de servidores baseada em Linux para fazer as coisas rodarem, mas estou ficando um sistema muito estranho que congela algumas vezes por semana e já que sou o único que pode acessar o servidor e os serviços de inicialização, isso é realmente irritante.

Veja alguns dados importantes:

Servidor

  • 384MB de memória
  • CentOS 5.6
  • PHP 5.2.10
  • MySQL 5.0.77
  • Apache 2.2.3

Uso

  • ca. 300 artigos no Wordpress
  • ca. 10k usuários únicos semanais
  • ca. 100 mil pageviews mensais
  • Coisas concluídas:

  • Todos os elementos estáticos (jquery, estilos, imagens de layout) são servidores de um servidor externo.
  • Wordpress armazenado em cache o máximo possível (W3 Total Cache)

Eu reduzi o problema ao gerenciamento de memória - ou a falta dele. Por alguma razão, a troca está desabilitada no servidor e, quando o consumo de memória atinge 100%, o servidor simplesmente entra em suruba e toda a esperança é perdida. A quantidade de memória (384MB) ainda deve ser mais do que suficiente para hospedar um site com essas estatísticas, então algo é feito errado. Eu estou ficando sem ideias, o que poderia ser.

Eu obviamente tentei ajustar as configurações em my.cnf, php.ini e httpd.conf, mas sem sucesso. Aqui estão minhas configurações principais no momento:

my.cnf

skip-innodb
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-locking
skip-ndbcluster
skip-bdb
skip-networking
safe-show-database
query_cache_limit=8M
query_cache_size=48M
query_cache_type=1
max_user_connections=200
max_connections=32
interactive_timeout=60
wait_timeout=60
connect_timeout=50
thread_cache_size=4
key_buffer= 96M
join_buffer=1M
max_connect_errors=20
max_allowed_packet=32M
table_cache=1024
record_buffer=1M
sort_buffer_size=6M
read_buffer_size=6M
read_rnd_buffer_size=6M
thread_concurrency=4
myisam_sort_buffer_size=32M
server-id=1
user=mysql
tmp_table_size=64M
max_heap_table_size=48M

php.ini

memory_limit = 128M

link

StartServers       2
MinSpareServers    3
MaxSpareServers   5
ServerLimit      16
MaxClients       16
MaxRequestsPerChild  1000

Esta é a parte em que pode ser muito evidente que eu estou voando pelo assento da minha calça aqui. Essas configurações são mesmo remotamente sensatas para uma configuração de servidor de 384 MB? O que mais pode ser feito para reduzir o número de falhas onde a única solução é me logar para reiniciar o mysqld e o httpd?

Eu sei que tudo isso é mais ou menos discutido um milhão de vezes antes e confie em mim, eu passei por todos os tópicos que eu encontrei do Server Fault, tentei todas as dicas e sugestões, mas sem sucesso. / p>

O mais bobo é que mudamos de uma configuração de hospedagem confiável para uma configuração de servidor virtual mais cara para reduzir as preocupações com a estabilidade e o dimensionamento do servidor, mas na verdade tornou as coisas ainda piores e sem dúvida 99% devido a minhas próprias deficiências como administrador!

Então, por favor, gurus, me ajudem um pouco. Eu prometo que nunca vou reclamar com um cara de TI sobre qualquer coisa e vou escrever apenas código que é fácil de implantar, não irá falhar no meio da noite e geralmente lembrarei de você de forma positiva em outros dias além do Dia de Sysadmin.

    
por Tommi Forsström 11.05.2011 / 09:52

1 resposta

1

  1. O Apache é bastante intensivo em memória, principalmente porque com o mpm_worker cada solicitação do cliente obtém seu próprio processo e com o mod_php cada processo do cliente obtém sua própria VM do PHP integrada. Tente reduzir ou desativar o intervalo KeepAlive, que libera os processos do cliente mais rapidamente (2 segundos são mais do que suficientes para a maioria dos casos de uso).
  2. Se você não tem uma partição swap, você ainda pode configurar o arquivo swap como este

    dd se = / dev / zero de = / swapfile1 bs = 1024 count = 524288
    mkswap / swapfile1
    swapon / swapfile1
    echo "/ swapfile1 padrões de troca de swap 0 0" > > / etc / fstab

    A troca de servidores da Web ainda terá um desempenho degradado, mas não será interrompido.

  3. Substitua o servidor da Web mais leve do Apache, por exemplo, Nginx para reduzir o uso da memória. instalação do nginx + php no CentOS
  4. Reduza os tamanhos do buffer de cache de consulta do MySQL se você achar que ainda está sem memória. Você pode adicionar o skip-innodb ao my.cnf para reduzir o uso de memória se você não estiver usando o mecanismo de armazenamento InnoDB.
  5. Descubra o que está sobrecarregando sua memória (assista htop / top, leia logs).
por 11.05.2011 / 11:16