Uma características dos sistemas web de grande porte é o volume de usuários que trafegam por ele e realizam operações simultâneas. Nem sempre o servidor está preparado para suportar um volume de processamento tão alto, então, talvez seja útil implementar no seu sistema um mecanismo para medir o nível de processamento. No script abaixo, é mostrado um exemplo de como obter o Load AVG. A partir deste valor, podemos então emitir uma mensagem de alerta aos usuários, para prevenir que a situação se agrave ainda mais.
/** * Retorna o tamanho medio da fila de processos do ultimo minuto (system load average) * @return float valor medio do tamanho da fila de processos */ function get_load_avg() { // Tentar obter pela funcao sys_getloadavg if (function_exists('sys_getloadavg')) { $vt = sys_getloadavg(); return $vt[0]; } // Tentar obter executando o comando uptime na linha de comando exec('uptime', $linhas, $retorno); if ($retorno == 0) { $linha = array_shift($linhas); $str = 'load average:'; $pos = strpos($linha, $str) + strlen($str); $tempos = trim(substr($linha, $pos)); $vt = explode(',', $tempos); return (float)trim($vt[0]); } // Nao conseguiu obter o valor return 0; }
Bom, agora é só verificar se o load avg passou de um determinado valor e emitir um erro 503 (serviço indisponível). Veja o exemplo:
define('MAX_LOAD_AVG', 5); if (get_load_avg() > MAX_LOAD_AVG) { header('HTTP/1.1 503 Service Unavailable'); header('Status: 503 Service Unavailable'); header('Retry-After: 3600'); header("Content-Type: text/html; charset=UTF-8"); echo <<<HTML <html> <head> <title>Sistema Indisponível</title> </head> <body> <h1>Sistema Indisponível</h1> <p>O servidor está operando acima do máximo permitido. Tente voltar mais tarde.</p> </body> </html> HTML; exit(1); } // Codigo a ser executado normalmente ...
De acordo com a Wikipédia, se o valor do Load AVG está muito acima do número de processadores, então provavelmente ele está bem ocupado e devem existir muitos processos aguardando na fila de execução. Portanto, este valor máximo da constante MAX_LOAD_AVG deve ser configurada de acordo com as capacidades do servidor.
De fato, o script não reduz diretamente a carga do servidor. Porém, como apenas uma mensagem simples é emitida ao usuário, existe pouco processamento envolvido nisso. Neste sentido, se os usuários forem consciêntes de que não vai adiantar recarregar insistentemente a página, provavelmente a carga do servidor tende a baixar.
0 comentários
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com