W3docs

sys_getloadavg()

Découvrez la fonction PHP sys_getloadavg() : présentation, fonctionnement et exemples d'utilisation.

Cet article présente la fonction PHP sys_getloadavg(), notamment une vue d'ensemble, son fonctionnement et des exemples d'utilisation.

Introduction à la fonction sys_getloadavg()

La fonction sys_getloadavg() est une fonction PHP intégrée qui récupère la charge moyenne du système. Notez qu'elle n'est disponible que sur les systèmes de type Unix (Linux, macOS) et ne fonctionnera pas sous Windows, où elle retourne false. Elle peut être utilisée pour surveiller les performances du système et optimiser l'allocation des ressources.

La fonction ne prend aucun argument et retourne un tableau contenant trois nombres à virgule flottante — les charges moyennes du système sur 1, 5 et 15 minutes :

sys_getloadavg(): array

Ce que signifie réellement la « charge moyenne »

La charge moyenne est le nombre moyen de processus en cours d'exécution sur le CPU ou en attente (ou en attente d'E/S disque) sur une fenêtre de temps donnée. Les trois valeurs permettent de visualiser une tendance :

  • $load[0] — charge sur la dernière 1 minute (la plus récente, la plus volatile).
  • $load[1] — charge sur les 5 dernières minutes.
  • $load[2] — charge sur les 15 dernières minutes (la plus lissée, la meilleure pour les tendances).

Une règle empirique approximative : divisez la charge par le nombre de cœurs CPU. Une charge sur 1 minute de 4.0 sur une machine à 4 cœurs signifie que le CPU est à peu près pleinement utilisé ; la même valeur sur une machine monocœur signifie qu'elle est fortement surchargée. C'est pourquoi vous normalisez presque toujours la charge par rapport au nombre de cœurs avant d'agir.

Comment utiliser la fonction sys_getloadavg()

L'utilisation de la fonction sys_getloadavg() est simple. Elle retourne un tableau de charges moyennes, dont la longueur doit être vérifiée avant d'accéder à des indices spécifiques. Voici un exemple :

Comment utiliser la fonction sys_getloadavg()

php— editable, runs on the server

Dans cet exemple, nous appelons sys_getloadavg() et assignons le tableau retourné à $load. Nous vérifions que le tableau contient au moins trois éléments avant d'afficher les charges moyennes sur 1, 5 et 15 minutes.

Normalisation de la charge par rapport aux cœurs CPU

Étant donné qu'une valeur de charge brute n'a pas de sens sans connaître le nombre de cœurs de la machine, un contrôle de santé pratique divise la charge par le nombre de cœurs et la compare à un seuil. Vous pouvez lire le nombre de cœurs depuis /proc/cpuinfo sous 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";
}
?>

Ici, $load[0] / $cores convertit la charge absolue en une valeur par cœur : une valeur supérieure à 1.0 signifie qu'il y a plus de processus exécutables que de cœurs, ce qui entraîne une mise en file d'attente des tâches.

Considérations de performance

La fonction sys_getloadavg() est un outil utile pour surveiller les performances du système. Cependant, elle lit directement depuis le noyau du système d'exploitation et n'est pas coûteuse en calcul. Dans les applications web à fort trafic, il est tout de même recommandé d'éviter de l'appeler à chaque requête afin de minimiser les surcharges inutiles. Utilisez-la pour une surveillance périodique ou des vérifications de diagnostic plutôt que dans des boucles intensives ou des sections critiques pour les performances.

Conclusion

En conclusion, sys_getloadavg() fournit un moyen rapide de récupérer les charges moyennes du système sur des systèmes de type Unix. En normalisant le résultat par rapport au nombre de cœurs CPU et en vérifiant le tableau retourné, vous pouvez surveiller efficacement les performances du système.

Pour d'autres outils de diagnostic et de temporisation, consultez microtime() pour la temporisation haute résolution, time() pour l'horodatage Unix actuel, et syslog() pour envoyer les alertes résultantes au journaliseur système. Pour inspecter le tableau retourné lui-même, count() est utilisé dans les exemples ci-dessus.

Pratique

Pratique
Quel est le rôle de la fonction sys_getloadavg() en PHP ?
Quel est le rôle de la fonction sys_getloadavg() en PHP ?
Was this page helpful?