sys_getloadavg()
Aprenda sobre a função PHP sys_getloadavg(), como funciona e veja exemplos práticos de uso para monitorar o desempenho do sistema.
Este artigo aborda a função PHP sys_getloadavg(), incluindo uma visão geral, como funciona e exemplos de uso.
Introdução à função sys_getloadavg()
A função sys_getloadavg() é uma função PHP embutida que recupera a média de carga do sistema. Note que ela está disponível apenas em sistemas Unix-like (Linux, macOS) e não funcionará no Windows, onde retorna false. Pode ser usada para monitorar o desempenho do sistema e otimizar a alocação de recursos.
A função não recebe argumentos e retorna um array contendo três números de ponto flutuante — as médias de carga do sistema de 1, 5 e 15 minutos:
sys_getloadavg(): arrayO que "média de carga" realmente significa
A média de carga é o número médio de processos que estão em execução na CPU ou aguardando por ela (ou por I/O de disco) ao longo de um determinado intervalo. Os três valores permitem visualizar uma tendência:
$load[0]— carga durante o último 1 minuto (mais recente, mais volátil).$load[1]— carga durante os últimos 5 minutos.$load[2]— carga durante os últimos 15 minutos (mais suave, melhor para tendências).
Uma regra prática aproximada: divida a carga pelo número de núcleos de CPU. Uma carga de 1 minuto de 4.0 em uma máquina com 4 núcleos significa que a CPU está aproximadamente totalmente utilizada; o mesmo valor em uma máquina com 1 núcleo significa que está fortemente sobrecarregada. É por isso que quase sempre se normaliza a carga em relação ao número de núcleos antes de agir sobre ela.
Como usar a função sys_getloadavg()
Usar a função sys_getloadavg() é simples. Ela retorna um array de médias de carga, que deve ser verificado quanto ao comprimento antes de acessar índices específicos. Veja um exemplo:
Como usar a função sys_getloadavg()
Neste exemplo, chamamos sys_getloadavg() e atribuímos o array retornado a $load. Verificamos se o array contém pelo menos três elementos antes de exibir as médias de carga de 1, 5 e 15 minutos.
Normalizando a carga em relação aos núcleos de CPU
Como um número bruto de carga não tem significado sem saber quantos núcleos a máquina possui, uma verificação de integridade prática divide a carga pela contagem de núcleos e a compara a um limite. Você pode ler a contagem de núcleos em /proc/cpuinfo no Linux (ou nproc):
<?php
function cpuCoreCount(): int
{
// Linux: count processor entries in /proc/cpuinfo
if (is_readable('/proc/cpuinfo')) {
$cpuinfo = file_get_contents('/proc/cpuinfo');
return max(1, substr_count($cpuinfo, 'processor'));
}
// Fallback for other systems
return (int) (shell_exec('nproc') ?: 1);
}
$load = sys_getloadavg();
$cores = cpuCoreCount();
$perCore = $load[0] / $cores;
if ($perCore > 1.0) {
echo "WARNING: system is overloaded (" . round($perCore, 2) . " per core)\n";
} else {
echo "OK: load per core is " . round($perCore, 2) . "\n";
}
?>Aqui, $load[0] / $cores converte a carga absoluta em um valor por núcleo: um valor acima de 1.0 significa que há mais processos executáveis do que núcleos, portanto o trabalho está sendo enfileirado.
Considerações de desempenho
A função sys_getloadavg() é uma ferramenta útil para monitorar o desempenho do sistema. No entanto, ela lê diretamente do kernel do SO e não é computacionalmente custosa. Em aplicações web de alto tráfego, ainda é uma boa prática evitar chamá-la a cada requisição para minimizar sobrecarga desnecessária. Use-a para monitoramento periódico ou verificações de diagnóstico, e não em loops apertados ou seções críticas para o desempenho.
Conclusão
Em conclusão, sys_getloadavg() fornece uma maneira rápida de recuperar as médias de carga do sistema em sistemas Unix-like. Ao normalizar o resultado em relação ao número de núcleos de CPU e verificar o array retornado, você pode monitorar efetivamente o desempenho do sistema.
Para outros auxiliares de diagnóstico e temporização, consulte microtime() para temporização de alta resolução, time() para o timestamp Unix atual, e syslog() para enviar os alertas resultantes para o logger do sistema. Para inspecionar o array retornado em si, count() é usado nos exemplos acima.