W3docs

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(): array

O 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()

php— editable, runs on the server

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.

Prática

Prática
Qual é o propósito da função sys_getloadavg() no PHP?
Qual é o propósito da função sys_getloadavg() no PHP?
Was this page helpful?