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