
Parece que hoje um site que administro fica online e offline o dia todo. Não tenho ideia do que está causando o problema, por isso estou buscando orientação sobre por onde começar. É um site baseado em Wordpress.
Então aqui está o que eu sei:
Eu uso um programa que faz ping no servidor a cada minuto e quando o servidor não está respondendo ele me envia um e-mail, para que eu possa saber exatamente quando o site está online e offline. O site entre 20h e 12h (12h28) e por volta de 1 hora da manhã 12h29 (fuso horário da cidade de Nova York, e todos os horários abaixo estão no mesmo fuso horário).
Na hora dos altos/baixos vejo muita pressão no uso da memória. Observe a média de carga quando o site está online/offline (http://screencast.com/t/BRlfXkqrbJII). Então executei este comando para reiniciar o http (http://screencast.com/t/usVtYWZ2Qi) e o uso de memória cai para isso (http://screencast.com/t/VdTIy3bgZiQB). Uma hora depois de reiniciar o http, o site ficou offline/online, então reiniciar o http não ajudou muito.
Quando o site está offline/online, executei o comando top e obtive isto (http://screencast.com/t/zEwr7YQj3). Aqui está um comando superior quando o site está no nível mais baixo (http://screencast.com/t/eaMfha9lbT- então isso seria apelidado de "normal").
Aqui está um relatório de largura de banda (http://screencast.com/t/AS0h2CH1Gypq).
O trânsito não parece ser tanto (http://screencast.com/t/s7hrWNNic1K), mas olhando meus tempos o site está subindo/descendo esse pode ser um dos motivos?
Eu tenho o pacote dvp Nitro no Media Temple (http://mediatemple.net/webhosting/nitro/).
Portanto, neste ponto, gostaria de solicitar ajuda para tentar descobrir qual é a causa disso e como posso identificar esse problema. Qualquer ajuda é muito apreciada.
Responder1
A média de carga na casa dos 30 é alta e a CPU está 100% ocupada. O uso da CPU é bastante uniforme em seus processos HTTPD, portanto não é um processo invasor específico. Basicamente, seu servidor não é capaz de lidar com o número de solicitações HTTP simultâneas que está recebendo.
Pode ser que você possa fazer algo para reduzir a quantidade de processamento necessária para produzir uma página.
Você pode revisar os logs do servidor Apache para tentar ver por que o carregamento é tão desigual. Talvez você esteja sendo alvo de um ataque DDOS - nesse caso, há coisas que você pode fazer para mitigar os efeitos.
Ou isso ou você precisa de um servidor maior.
Talvez o MediaTemple tenha um problema - vejaComo faço para otimizar um site Wordpress de alto tráfego?
Responder2
Eu uso um programa que faz ping no servidor a cada minuto
Então você monitora todos os dispositivos de rede entre você e o sistema onde o site reside. Na verdade, você está medindo quase tudo, exceto o site em si. Claro, se o computador que executa o servidor web não conseguir responder aos pings, provavelmente também não responderá às solicitações HTTP.
Olhando para os outros detalhes fornecidos, parece ser o processamento HTTP que está causando problemas - no entanto, esse é um servidor muito mal configurado se não responder aos pings devido ao processamento HTTP.
Pode ser um ataque DOS - mas suspeito que seja mais provável que haja uma condição de corrida em algum lugar. O que está acontecendo com seu tráfego HTTP? Você está recebendo picos de atividade de alguns hosts? O tempo de resposta está adiantado ou atrasado em relação à média de carga?
Os gráficos e relatórios que você forneceu ajudam um pouco - mas há muito pouca informação aqui para basear um diagnóstico - você realmente precisa ver sua taxa média calculada por minuto, no máximo, e não por hora. E aquele enorme pico às 0h? Isso parece estranho para mim.
Embora você possa começar a registrar %D e instalar/configurar o mod-log-firstbyte para ver onde o problema está surgindo, você pode fazer tudo isso de forma muito menos invasiva usando um prefixo automático do PHP, por exemplo, o seguinte irá gravar uma entrada de log quando o processamento começar e registre muitas informações sobre o trabalho realizado no processamento de uma solicitação quando ela for concluída.
<?php
global $error_log, $start_time;
// IIRC wordpress implement output buffering so no need to do it here.
$error_log=@fopen('php://stdin','w');
$start_time=microtime(true);
@fputs($error_log, date('r')
. getmypid() .
. " started \""
. $_SERVER['REQUEST_URI'] . '"');
@register_shutdown_function('log_complete');
function log_complete()
{
global $error_log, $start_time;
$r=getrusage();
@fputs($error_log, date('r')
. getmypid() .
" finished " .
memory_get_usage() . ' ' .
microtime(true)-$start_time . ' ' .
var_export($r, true));
}