Zum Hauptinhalt springen
Die Ruby VM (Virtual Machine) plant die Ausführung von Ruby-Threads. Zu jedem Zeitpunkt kann nur ein Thread gleichzeitig aktiv sein und mit dem Zustand der Ruby VM interagieren. Der Mechanismus, mit dem der Ruby-Interpreter dies sicherstellt, ist das Global VM Lock (GVL). Das Umschalten zwischen Threads hat einen eigenen Overhead. Die Metriken zum Global VM Lock erlauben es Ihnen, die Zeit zu sehen, die ein Thread auf seine Ausführung wartet, sowie die Anzahl der Threads, die zu einem bestimmten Zeitpunkt auf die Ausführung warten. Diese Metriken können hilfreiche Einblicke zum Verständnis von Performance-Problemen in Ihrer Anwendung liefern. Wenn AppSignal Global-VM-Lock-Metriken erkennt, wird ein Magic Dashboard erstellt, mit dem Sie zentrale Metriken visuell überwachen können.

Installation

Die gvltools-Bibliothek ist nur mit dem offiziellen Ruby-Interpreter kompatibel. JRuby wird nicht unterstützt.
Damit AppSignal Global-VM-Lock-Metriken erfassen kann, müssen Sie die gvltools-Bibliothek zu Ihrem Projekt hinzufügen:
bundle add gvltools
Sobald sie installiert ist, sammelt die AppSignal-Integration automatisch jede Minute Global-VM-Lock-Metriken.

Magic Dashboards

Magic Dashboards erscheinen im Bereich Dashboard von AppSignal. Ruby GVL magic dashboard creation Das Global VM Lock Magic Dashboard enthält die folgenden Graphen:
GraphMetrik
Global Timergvl_global_timer
Wartende Threadsgvl_waiting_threads
AppSignal meldet die folgenden Tags für Global-VM-Lock-Metriken:
NameBeschreibung
hostnameDer Name des Hosts, von dem die Metrik gemeldet wurde
process_idDie ID des Prozesses, von dem die Metrik gemeldet wurde
process_nameDer Name des Prozesses, von dem die Metrik gemeldet wurde
Die Tags process_id und process_name werden nur gemeldet, wenn AppSignal für Ruby Version 3.9.3 oder neuer verwendet wird.
Ruby GVL magic dashboard

Global-Timer-Graph

Der Global-Timer-Graph zeigt die Zeit, die Threads in der letzten Minute darauf gewartet haben, fortgesetzt zu werden, also darauf, dass ihr Code erneut ausgeführt wird.

Konfiguration der Global-Timer-Messung

Die Messung des Global Timers hat einen geschätzten Performance-Overhead von 5 %. Um negative Auswirkungen auf die Performance Ihrer Anwendung zu vermeiden, möchten Sie vielleicht gvl_global_timer standardmäßig deaktivieren und nur bei Bedarf für bestimmte Anfragen oder thread-intensive Jobs aktivieren. Um diese Metrik beim Start zu deaktivieren, setzen Sie die Konfigurationsoption enable_gvl_global_timer auf false. Anschließend können Sie die gvltools-Bibliothek verwenden, um die Global-Timer-Messung zu aktivieren und zu deaktivieren, ohne Ihre Anwendung neu starten zu müssen:
require "gvltools"

GVLTools::GlobalTimer.enable

# some code that uses threads ...

GVLTools::GlobalTimer.disable

Graph der wartenden Threads

Der Graph der wartenden Threads zeigt die Anzahl der Threads, die zu einem bestimmten Zeitpunkt darauf warten, fortgesetzt zu werden. Der Graph enthält keine Threads, die nicht bereit sind, fortgesetzt zu werden, wie etwa Threads, die schlafen oder auf ein I/O-Event warten. Um diese Metrik zu deaktivieren, können Sie die Konfigurationsoption enable_gvl_waiting_threads auf false setzen.