Passer au contenu principal
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 :
bundle add gvltools
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. Création du magic dashboard Ruby GVL Le magic dashboard Global VM Lock contient les graphiques suivants :
GraphiqueMétrique
Global timergvl_global_timer
Waiting threadsgvl_waiting_threads
AppSignal signale les tags suivants pour les métriques du Global VM Lock :
NomDescription
hostnameLe nom de l’hôte depuis lequel la métrique a été signalée
process_idL’ID du processus depuis lequel la métrique a été signalée
process_nameLe 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.
Magic dashboard Ruby GVL

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.