Naar hoofdinhoud gaan
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:
bundle add gvltools
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. Ruby GVL magic dashboard creation Het Global VM Lock magic dashboard bevat de volgende grafieken:
GrafiekMetriek
Global timergvl_global_timer
Waiting threadsgvl_waiting_threads
AppSignal rapporteert de volgende tags voor Global VM Lock-metrieken:
NaamBeschrijving
hostnameDe naam van de host waarvan de metriek is gerapporteerd
process_idHet ID van het proces waarvan de metriek is gerapporteerd
process_nameDe 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.
Ruby GVL magic dashboard

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.

Meten van de global timer configureren

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.