La VM (machine virtuelle) Ruby planifie l’exécution des threads Ruby. À tout moment, un seul thread peut être actif et interagir avec l’état de la VM Ruby.
Le mécanisme par lequel l’interpréteur Ruby garantit cela est le Global VM Lock (GVL).
Le changement de thread a sa propre surcharge. Les métriques relatives au Global VM Lock vous permettent de voir le temps qu’un thread passe à attendre son tour pour s’exécuter, ainsi que le nombre de threads en attente d’exécution à un moment donné. Ces métriques peuvent fournir des informations utiles pour comprendre les problèmes de performances de votre application.
Lorsqu’AppSignal détecte les métriques du Global VM Lock, il créera un Magic Dashboard vous permettant de surveiller visuellement les métriques principales.
Installation
La bibliothèque gvltools n’est compatible qu’avec l’interpréteur Ruby officiel.
JRuby n’est pas pris en charge.
Pour qu’AppSignal puisse obtenir les métriques du Global VM Lock, vous devez ajouter la bibliothèque gvltools à votre projet :
Une fois installée, l’intégration AppSignal collectera automatiquement les métriques du Global VM Lock chaque minute.
Magic dashboards
Les magic dashboards apparaîtront dans la section Dashboard d’AppSignal.
Le magic dashboard Global VM Lock contient les graphiques suivants :
| Graphique | Métrique |
|---|
| Global timer | gvl_global_timer |
| Waiting threads | gvl_waiting_threads |
AppSignal signale les tags suivants pour les métriques du Global VM Lock :
| Nom | Description |
|---|
hostname | Le nom de l’hôte depuis lequel la métrique a été signalée |
process_id | L’ID du processus depuis lequel la métrique a été signalée |
process_name | Le nom du processus depuis lequel la métrique a été signalée |
Les tags process_id et process_name ne sont signalés qu’en utilisant
AppSignal for Ruby version 3.9.3 ou ultérieure.
Graphique Global timer
Le graphique Global timer montre le temps passé par les threads à attendre leur reprise au cours de la dernière minute, c’est-à-dire à attendre que leur code soit à nouveau exécuté.
Configuration de la mesure du global timer
La mesure du global timer a une surcharge de performance estimée à 5 %.
Pour éviter d’avoir un impact négatif sur les performances de votre application, vous pouvez désactiver gvl_global_timer par défaut et l’activer au besoin pour des requêtes spécifiques ou des jobs intensifs en threads.
Pour désactiver cette métrique au démarrage, définissez l’option de configuration enable_gvl_global_timer sur false.
Vous pouvez ensuite utiliser la bibliothèque gvltools pour activer et désactiver la mesure du global timer sans avoir à redémarrer votre application :
require "gvltools"
GVLTools::GlobalTimer.enable
# some code that uses threads ...
GVLTools::GlobalTimer.disable
Graphique Waiting threads
Le graphique Waiting threads montre le nombre de threads en attente de reprise à un moment donné. Le graphique n’inclut pas les threads qui ne sont pas prêts à être repris, comme les threads qui dorment ou attendent un événement d’E/S.
Pour désactiver cette métrique, vous pouvez définir l’option de configuration enable_gvl_waiting_threads sur false.