De Ruby VM (Virtual Machine) plant Ruby-threads in voor uitvoering. Op elk gegeven moment kan slechts één thread tegelijk actief zijn en interactie hebben met de status van de Ruby VM.
Het mechanisme waarmee de Ruby-interpreter dit garandeert, is de Global VM Lock (GVL).
Het wisselen tussen threads heeft zijn eigen overhead. De metrieken van de Global VM Lock laten u zien hoeveel tijd een thread besteedt aan het wachten op zijn beurt om uitgevoerd te worden, en het aantal threads dat op een bepaald moment op uitvoering wacht. Deze metrieken kunnen nuttige inzichten bieden voor het begrijpen van prestatieproblemen in uw applicatie.
Wanneer AppSignal Global VM Lock-metrieken detecteert, maakt het een Magic Dashboard aan, waardoor u kerncijfers visueel kunt monitoren.
Installatie
De gvltools-bibliotheek is alleen compatibel met de officiële
Ruby-interpreter. JRuby wordt niet ondersteund.
Om AppSignal Global VM Lock-metrieken te laten verkrijgen, moet u de gvltools-bibliotheek aan uw project toevoegen:
Eenmaal geïnstalleerd, zal de AppSignal-integratie elke minuut automatisch Global VM Lock-metrieken verzamelen.
Magic dashboards
Magic dashboards verschijnen in de sectie Dashboard van AppSignal.
Het Global VM Lock magic dashboard bevat de volgende grafieken:
| Grafiek | Metriek |
|---|
| Global timer | gvl_global_timer |
| Waiting threads | gvl_waiting_threads |
AppSignal rapporteert de volgende tags voor Global VM Lock-metrieken:
| Naam | Beschrijving |
|---|
hostname | De naam van de host waarvan de metriek is gerapporteerd |
process_id | Het ID van het proces waarvan de metriek is gerapporteerd |
process_name | De naam van het proces waarvan de metriek is gerapporteerd |
De tags process_id en process_name worden alleen gerapporteerd bij gebruik
van AppSignal voor Ruby versie 3.9.3 of nieuwer.
Global timer-grafiek
De global timer-grafiek toont de tijd die threads tijdens de laatste minuut hebben besteed aan het wachten om te worden hervat, dat wil zeggen wachten tot hun code opnieuw wordt uitgevoerd.
Het meten van de global timer heeft een geschatte prestatie-overhead van 5%.
Om negatieve gevolgen voor de prestaties van uw applicatie te voorkomen, kunt u gvl_global_timer standaard uitschakelen en deze inschakelen wanneer dat nodig is voor specifieke requests of thread-intensieve jobs.
Om deze metriek bij opstarten uit te schakelen, stelt u de configuratieoptie enable_gvl_global_timer in op false.
Vervolgens kunt u de gvltools-bibliotheek gebruiken om de global timer-meting in en uit te schakelen zonder uw applicatie opnieuw te hoeven starten:
require "gvltools"
GVLTools::GlobalTimer.enable
# some code that uses threads ...
GVLTools::GlobalTimer.disable
Waiting threads-grafiek
De waiting threads-grafiek toont het aantal threads dat op een bepaald moment wacht om te worden hervat. De grafiek bevat geen threads die niet klaar zijn om hervat te worden, zoals threads die slapen of wachten op een I/O-event.
Om deze metriek uit te schakelen, kunt u de configuratieoptie enable_gvl_waiting_threads op false zetten.