In diesem Dokument wird beschrieben, wie Sie Probleme mit Limits für gleichzeitige Vorgänge in der Compute Engine beheben, die durch rateLimitExceeded
-Fehler verursacht werden.
Mit den folgenden Schritten zur Fehlerbehebung kannst du die Ursache eines rateLimitExceeded
-Fehlers ermitteln:
-
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Logging ist.
Wenn Sie die von der Compute Engine API generierten Fehlerprotokolle filtern möchten, geben Sie die folgende Logging-Abfrage in den Abfrageeditor ein.
log_id("cloudaudit.googleapis.com/activity") protoPayload.serviceName="compute.googleapis.com" protoPayload.response.error.code=403 protoPayload.status.message="Rate Limit Exceeded"
Die gefilterten Fehlerprotokolle sollten in etwa so aussehen:
"protoPayload":{ "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "message": "Rate Limit Exceeded" } "serviceName": "compute.googleapis.com", "methodName": "METHOD_NAME", ... ... "response": { "error": { "message": "Rate Limit Exceeded", "code": 403, "errors": [ { "message": "Rate Limit Exceeded", "reason": "rateLimitExceeded", "domain": "usageLimits" } ] }, "@type": "type.googleapis.com/error" }, "resourceLocation": { "currentLocations": [ "LOCATION" ] }, ... ...
Die Fehlerdetails enthalten die folgenden Werte:
METHOD_NAME
: Der Name der Dienstmethode oder des Vorgangs. Bei API-Aufrufen ist dies der Name der API-Methode.LOCATION
: Der Speicherort der Ressource. Dies kann eine Region, Zone oder global sein. Die EinträgecurrentLocations: "us-central1"
(Regional) odercurrentLocations: "us-central1-a"
geben beispielsweise an, dass die Region"us-central1"
odercurrentLocations: "global"
ist.
Ermitteln Sie den zugehörigen
methodName
-Wert aus dem Fehlerprotokoll. Dieser Name steht für die API-Methode, für die das Ratenlimit überschritten wurde, z. B.v1.compute.instances.stop
.Suchen Sie in den Audit-Logs nach dem entsprechenden Standort.
Prüfen Sie die Kontingente und Limits für
Concurrent operations per project
.Console
Öffnen Sie in der Google Cloud Console die Seite Kontingente.
Auf der Seite Kontingente sind die Kontingentnutzung und die Kontingentlimits für Ihr Projekt aufgeführt. Standardmäßig werden die am häufigsten verwendeten Kontingente in der Liste sortiert. So können Sie leicht feststellen, bei welchen Limits die Gefahr besteht, dass sie überschritten werden.
Wenn Sie die Liste filtern und die Nutzung und das Limit für ein bestimmtes Kontingent aufrufen möchten, wählen Sie im Feld Filter die Option Kontingent oder Messwert aus.
Sie können beispielsweise das Kontingent nach dem Namen
Concurrent global operations per project operation type
auswählen oderService: Compute Engine API
,type: System Limit
und ein Schlüsselwortconcurrent
, um alle Kontingente für parallele Vorgänge aufzulisten. Durch Filtern wird eine Liste der gleichzeitigen Kontingente angezeigt. In dieser Liste können Sie nach dem betroffenen Kontingent suchen. Wenn Sie das Kontingent für einen bestimmten Vorgang filtern möchten, fügen Sie der Filterabfrage Dimensionen hinzu und wählen Sie operation_type aus (in den Audit-Logs als methodName angezeigt).Wählen Sie beispielsweise
instances_stop
aus, um die Kontingentnutzung und das Limit für den Vorganginstances.stop
aufzurufen.Wenn Sie das Kontingent nach einer bestimmten Region filtern möchten, fügen Sie der Filterabfrage Dimensionen hinzu und wählen Sie die Region aus (in den Prüfprotokollen als currentLocations angezeigt).
Wählen Sie beispielsweise
us-central1
aus, um die Kontingentnutzung und das Limit für die Regionus-central1
aufzurufen.Mit den Filtern region und operation_type können Sie die Kontingentnutzung und das Limit für einen bestimmten Vorgang in einer bestimmten Region aufrufen.
gcloud
Mit der Google Cloud CLI können Sie die Nutzung und das Limit für Kontingente für parallele Vorgänge aufrufen.
Für diesen Ansatz müssen Sie die Komponente Alphabefehle installiert haben. Wenn Sie Cloud Shell für die Interaktion mit Google Cloudverwenden, wird das Google Cloud CLI für Sie installiert.
Verwenden Sie den folgenden Befehl, um ein Vorgangskontingent aufzurufen:
gcloud alpha services quota list \ --service=compute.googleapis.com \ --consumer=projects/PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch die ID des Projekts, für das Sie das Kontingent aufrufen möchten.Diese Kontingente werden in der Regel in zwei Kategorien unterteilt:
- Global oder regional
- Pro Projekt oder pro Projekt und Vorgangstyp
Weitere Informationen finden Sie unter Kontingentgruppen für gleichzeitige Vorgänge.
Sehen Sie sich das Nutzungsdiagramm für das Kontingent an. Wenn die Nutzung während des Zeitraums der Fehlerprotokolle dem Kontingentlimit nahekommt oder es überschreitet, wird das Kontingent- oder Systemlimit überschritten.
Wenn Sie Diagramme mit der aktuellen und der Spitzennutzung aufrufen möchten, rufen Sie das Kontingent auf und klicken Sie dann auf
Monitoring. Möglicherweise müssen Sie nach rechts zum Ende der Tabelle scrollen.In der Überwachungsgrafik wird die Ursache des
rateLimitExceeded
-Fehlers mit dem jeweiligen Kontingent/Limit bestätigt. Wenn die aktuellen Werte über den Grenzwerten liegen, wird das Systemlimit überschritten. Da Systemlimits nicht geändert werden können, empfehlen wir die folgenden Best Practices, um die Anzahl der gleichzeitigen Vorgänge zu reduzieren.Einige Best Practices:
- Auf Fertigstellung von Vorgängen warten
- Fehlercodes nutzen, keine Fehlermeldungen
Clientseitige Wiederholungsversuche minimieren, um API-Ratenbegrenzungen einzuhalten
Mit einer der folgenden Methoden können Sie die Anzahl der Wiederholungen minimieren: