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.