Queue-Zeiten
Ein gängiges Setup für Ruby-Anwendungen ist, dass der Ruby-Webserver wie Unicorn oder Puma hinter einem anderen (äußeren) Webserver wie Nginx oder Apache läuft. Diese werden normalerweise verwendet, um SSL-Verbindungen zu terminieren und beispielsweise statische Assets zu verwalten. Wenn Ihr Ruby-Webserver mit der Verarbeitung von Requests beschäftigt ist, können Nginx oder Apache weiterhin neue Verbindungen annehmen und darauf warten, dass ein Ruby-Prozess verfügbar wird, um den Request zu bearbeiten. Der äußere Webserver stellt den Request in der Zwischenzeit in eine Queue. Idealerweise gibt es genügend Kapazität, sodass der äußere Webserver nie auf Ruby warten muss, aber in der Praxis kann dies bei einem plötzlichen Anstieg der Requests passieren. Ein guter Indikator für die Kapazität ist daher die Queue-Time-Metrik, d. h. die Zeitspanne zwischen dem Annehmen des Requests durch den äußeren Webserver und der Bearbeitung des Requests durch Ruby. Eine lange Queue-Zeit über einen längeren Zeitraum deutet darauf hin, dass Sie die Anzahl der Ruby-Prozesse/Threads, die Requests bearbeiten, oder die Anzahl der Webserver hochskalieren müssen. Sie finden die Queue-Time-Metriken auf der Performance-Graphs-Seite:
Setup
AppSignal verfolgt die Queue-Zeit auf Heroku automatisch, aber wenn Sie Ihren eigenen Server mit NGINX oder Apache betreiben, müssen Sie die richtigen Header einrichten, damit die Verfolgung der Queue-Zeit funktioniert.NGINX
Sie können die Variable${msec} mit NGINX 1.2.6 oder höher verwenden. Dies ist die aktuelle Zeit in Millisekunden.
Apache
In Apache stellt mod_headers eine"$t"-Variable bereit, die zur Verfolgung der Queue-Zeit verwendet werden kann. Fügen Sie den Header wie folgt hinzu: