In diesem Dokument wird beschrieben, wie Sie Probleme mit Limits für gleichzeitige Vorgänge in Compute Engine beheben, die durch rateLimitExceeded
-Fehler verursacht werden.
Mit den folgenden Schritten zur Fehlerbehebung können Sie 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 Fehlerlogs 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 Fehlerlogs 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 Standort 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 Fehlerlog. 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 relevanten Ort.
Prüfen Sie die
Concurrent operations per project
-Kontingente und ‑Limits.Console
Rufen Sie in der Google Cloud Console die Seite Kontingente auf.
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.
Wählen Sie beispielsweise entweder das Kontingent mit dem Namen
Concurrent global operations per project operation type
oderService: Compute Engine API
,type: System Limit
und ein Schlüsselwortconcurrent
aus, um alle Kontingente für gleichzeitige Vorgänge aufzulisten. Beim 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 Dimensions 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 für eine bestimmte Region filtern möchten, fügen Sie der Filterabfrage Dimensionen hinzu und wählen Sie die Region aus (in den Audit-Logs als currentLocations angezeigt).
Wählen Sie beispielsweise
us-central1
aus, um die Kontingentnutzung und das Limit für die Regionus-central1
aufzurufen.Die Filter region und operation_type können zusammen verwendet werden, um die Kontingentnutzung und das Limit für einen bestimmten Vorgang in einer bestimmten Region aufzurufen.
gcloud
Mit der Google Cloud CLI können Sie die Nutzung und das Limit von Kontingenten für gleichzeitige 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 Fehlerlogs nahe am oder über dem Kontingentlimit liegt, bedeutet das, dass das Kontingent- oder Systemlimit überschritten wurde.
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 ganz nach rechts scrollen.Im Monitoring-Diagramm wird die Ursache des
rateLimitExceeded
-Fehlers mit dem spezifischen Kontingent/Limit bestätigt. Wenn die aktuellen Werte über den Grenzwerten liegen, bedeutet das, dass das Systemlimit überschritten wurde. Da Systemlimits nicht geändert werden können, empfehlen wir die folgenden Best Practices, um die Anzahl der gleichzeitigen Vorgänge zu reduzieren.Hier 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 Wiederholungsversuche minimieren: