Centos / carga alta do servidor MySQL [fechada]

2

Atualmente gero um site que recebe cerca de 15.000 a 20.000 visitas por dia. Atualmente, executamos um fórum muito ativo, hospedado com o software Vbulletin. Temos 4,5 milhões de posts, 80.000 threads, com cerca de 11.000 membros dos quais pouco menos de um terço está ativo o tempo todo. Agora estou executando um Intel Xeon Quad Core (2.13Ghz) com 4GB de RAM, Centos 5.5 e executando o DirectAdmin na caixa para gerenciá-lo. Eu também executo a versão estável atual do Apache, MySQL e php. Este é o único site que está hospedado nesta máquina. Agora, durante horários aleatórios do dia, às vezes, quando fica ocupado, a carga do servidor pode chegar a 20, mas isso também pode acontecer quando temos apenas 200 usuários ativos também. Eu não entendo o que está causando esses problemas. Às vezes, recebo páginas que podem gerar em 0,2 segundos, outras vezes em 5 a 8 segundos. Eu personalizei o arquivo my.cnf e isso não ajudou em nada, eu não sabia para onde mais se virar, então se alguém tiver alguma sugestão, por favor me avise.

    
por Jake 13.02.2011 / 19:36

2 respostas

2

Você está fazendo o login:
Infelizmente muitas pessoas muitas vezes esquecem de procurar nos @ logs para obter uma visão do problema.

Gostaria de começar com alguns recursos de Monitoramento básico, Registro em log e & Conjunto de ferramentas de diagnóstico.

  1. top
  2. mtop link
  3. innotop link
  4. MySQL processlist / mysqladmin proc
  5. MySQLTuner link
  6. MySQLidxchk: link (ótimo para análise de log)
  7. MySQLSLA - relatório de status para o MySQL: link
  8. MySQLReport - http: // hackmysql.com/scripts/mysqlreport (excelente utilitário que interpreta os valores do SHOW STATUS da MySQL em um relatório detalhado sobre como o MySQL está sendo executado
  9. IOTOP / SAR
  10. Tem certeza de que todo o tráfego é válido? pode querer verificar novamente os logs e verificar se o tráfego é válido.
  11. Todas as conexões - são múltiplas dos mesmos endereços IP? (mais do que o habitual) use isso para verificar quantas conexões estão vindo de 1 ip: netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
  12. Você também pode trabalhar com o Mod_Evasive
  13. Dependendo de suas descobertas - mova o MySQL para outro servidor
  14. Pense em um balanceador de carga - ou Nginx ou passando de uma solução de hospedagem web do Apache para outra como Cherokee, Nginx, etc ...

Se este post ajudou você - por que você não vota :-) Bênçãos

    
por 13.02.2011 / 23:43
0

Algumas outras coisas além da excelente lista de Glenn:

  • Verifique 'top' e 'free' para garantir que você não está usando nenhuma memória swap, pois isso eliminará seu desempenho. Se você achar que está começando a usar o swap, reduza os requisitos de memória do Apache (reduza principalmente o MaxClients) e o MySQL (todas as várias opções de cache / buffer).
  • Se o fórum for PHP, verifique se você está executando um cache opcode, como eAccelerator ou APC.
  • Considere testar o desempenho do site usando algo como ab ou cerco. Isso fornecerá os recursos atuais do seu servidor e permitirá que você teste o efeito de otimizações específicas.
  • Use o topo para ver quais aplicativos estão usando a CPU nos horários de pico. Isso lhe dará uma ideia básica de onde começar a otimizar.
  • Se você estiver exibindo muito conteúdo estático, considere usar um servidor da Web mais leve apenas para isso (como lighttpd ou nginx).
  • Verifique as estatísticas do log de consulta no MySQL para verificar se ele está ativado e funcionando bem. Se você está recebendo um monte de "LOW MEM Prunes" considere usar mais memória para o cache, se puder.
  • Você pode obter o melhor desempenho se der mais memória ao MySQL em vez do Apache. O ideal é que você queira que seu conjunto de registros ativo possa ser mantido totalmente na RAM, o que minimiza o acesso ao disco. Este não é o tamanho total do banco de dados, apenas o tamanho de todos os registros que são normalmente lidos durante cada dia. Em uma máquina de 4GB, eu me certificaria de que o MySQL tenha pelo menos 1GB no total.
  • Esteja ciente de que o tráfego geralmente vem em surtos e seu servidor precisa não apenas lidar com a taxa média de tráfego, mas também com os picos de tráfego. Não fique em uma situação em que sua configuração possa lidar com o tráfego médio, mas comece a ficar para trás quando o tráfego atingir o pico. Você está, então, em uma situação em que o servidor está lutando para acompanhar, mas continua ficando cada vez mais sobrecarregado.

Apenas por experiência própria, seu servidor 'deve' ser suficiente para suportar um site de 20 mil visualizações / dia com uma boa configuração e alguns ajustes de otimização. Eu não ficaria surpreso se você teoricamente conseguir 10x isso ou mais com algum trabalho.

    
por 14.02.2011 / 00:40

Tags