Fehlerbehebung

Auf dieser Seite wird beschrieben, wie Sie Probleme mit Cloud Profiler beheben.

Fehler bei der Konfiguration des Google Cloud-Projekts

In diesem Abschnitt sind mögliche Konfigurationsprobleme sowie Vorschläge zu deren Behebung aufgeführt.

Cloud Profiler API ist deaktiviert

Der folgende Fehler tritt auf, wenn die Profiler API nicht für Ihr Google Cloud-Projekt aktiviert ist:

failed to create a profile, will retry: rpc error: code = PermissionDenied
desc = Cloud Profiler API has not been used in project 012345 before or it is disabled.

Zum Beheben dieses Problems muss die Profiler API für Ihr Google Cloud-Projekt aktiviert sein:

  1. Wählen Sie im Navigationsbereich der Google Cloud Console APIs und Dienste aus, klicken Sie auf APIs und Dienste aktivieren und aktivieren Sie dann die Cloud Profiler API:

    Zu den Einstellungen für die Profiler API

  2. Wenn API aktiviert angezeigt wird, ist die API bereits aktiviert. Falls nicht, klicken Sie auf die Schaltfläche Aktivieren.

Aufrufender Nutzer hat keine Berechtigung

Der folgende Fehler tritt auf, wenn Sie nicht berechtigt sind, Profildaten in ein Google Cloud-Projekt zu schreiben:

failed to create a profile, will retry: rpc error: code = PermissionDenied
desc = The caller does not have permission.

Um dieses Problem zu beheben, bitten Sie Ihren Administrator, Ihnen zusätzliche Berechtigungen für dieses Projekt zu gewähren. Eine detaillierte Liste der erforderlichen Berechtigungen und Rollen finden Sie unter Zugriffssteuerung.

Fehler mit Node.js

In diesem Abschnitt werden Probleme aufgeführt, die bei der Verwendung des Node.js-Profiling-Agents auftreten können. Sie erhalten außerdem Vorschläge zum Beheben der einzelnen Fehler.

Anwendung wird mit Node.js nicht korrekt beendet

Der Profiler-Agent für Node.js stört das normale Beenden des Programms. Es kann bis zu einer Stunde dauern, bis das Programm beendet ist, nachdem alle Aufgaben im Programm abgeschlossen wurden.

Um dieses Problem zu beheben, geben Sie ein SIGINT-Signal aus, z. B. mit Ctrl-C. Wenn Sie ein SIGINT-Signal ausgeben, wird der Vorgang ordnungsgemäß beendet.

Fehler mit Python

In diesem Abschnitt werden Probleme aufgeführt, die bei der Verwendung des Python-Profiling-Agents auftreten können. Sie erhalten außerdem Vorschläge zum Beheben der einzelnen Fehler.

NotImplementedError-Ausnahme mit Python

Die folgende Ausnahme wird mit der Funktion start ausgegeben, wenn die Anwendung in einer Nicht-Linux-Umgebung ausgeführt wird:

NotImplementedError

Um dieses Problem zu beheben, führen Sie die Anwendung in einer Linux-Umgebung aus.

ValueError-Ausnahme mit Python

Die folgende Ausnahme wird während start ausgegeben, wenn die Funktionsargumente ungültig sind, notwendige Informationen nicht anhand der Umgebungsvariablen und -argumente ermittelt werden können oder wenn CPU-Zeit- und Echtzeitzeitprofile deaktiviert sind:

ValueError

Um dieses Problem zu beheben, prüfen Sie alle folgenden Punkte:

  • Prüfen Sie, ob der Name und die Version des Dienstes die unter Argumente für Dienstnamen und -versionen definierten Anforderungen erfüllen.
  • Wenn das Erstellen von Echtzeitprofilen aktiviert ist, sorgen Sie dafür, dass start vom Hauptthread aus aufgerufen wird.
  • Prüfen Sie, ob Sie eine unterstützte Version von Python verwenden und ob die Erstellung von CPU-Zeitprofilen bzw. Echtzeitprofilen aktiviert ist. Weitere Informationen finden Sie unter start-Funktion.
  • Prüfen Sie, ob Sie den Parameter project_id auf start festgelegt haben, wenn Sie die Anwendung außerhalb der GCP ausführen. Weitere Informationen finden Sie unter start-Funktion.

Ressource ist mit Python vorübergehend nicht verfügbar

Das Fehlerlog enthält nach der Aktivierung von Profiler folgende Einträge:

BlockingIOError: [Errno 11] Resource temporarily unavailable
Exception ignored when trying to write to the signal wakeup fd

Diese Meldungen treten auf, wenn sich eine Anwendung mit dem Signal-Wakeup-Dateideskriptor signal.set_wakeup_fd registriert. Wenn der Zwischenspeicher der Dateibeschreibung gefüllt wird, wird standardmäßig eine Warnung in stderr protokolliert.

Wenn Cloud Profiler Profile erfasst, werden Signale mit hoher Frequenz ausgelöst, die dazu führen können, dass der Signaldateideskriptor gefüllt wird. Informationen zu diesem GitHub-Problem finden Sie unter BlockingIOError in App Engine.

Führen Sie einen der folgenden Schritte aus, um das Problem zu lösen:

  • Wenn Ihre Anwendung bei einem Verlust von Signalen sicher ausgeführt werden kann, können Sie Cloud Profiler verwenden. Wenn Sie Python 3.7 oder höher verwenden und die Warnmeldungen deaktivieren möchten, übergeben Sie warn_on_full_buffer=False als Parameter an signal.set_wakeup_fd.

  • Wenn Ihre Anwendung bei einem Verlust von Signalen nicht sicher ausgeführt werden kann, sollten Sie Cloud Profiler nicht mehr verwenden. Eine weitere Verwendung kann den Verlust von Signalnummern und übermäßige Einträge im Fehlerlog nach sich ziehen.

Es sind keine Profile vorhanden

Wenn keine Profile angezeigt werden, hat dies meist eine der beiden folgenden Ursachen:

  • Der Dienst wird nicht lange genug ausgeführt, um Profile erfassen zu können.
  • Der Dienst ist nicht für die Authentifizierung konfiguriert.

Um Probleme im Zusammenhang mit einer kurzen Laufzeit zu beheben, achten Sie darauf, dass der Dienst mindestens drei Minuten kontinuierlich ausgeführt wird.

Zur Behebung von Problemen im Zusammenhang mit der Authentifizierung muss der Profiler-Agent Daten in Ihr Google Cloud-Projekt schreiben können:

  • Wenn Ihr Dienst in Google Cloud ausgeführt wird, erfolgt die Authentifizierung automatisch, es sei denn, Sie stellen einen Container in Compute Engine bereit. Wenn Sie einen Container in Compute Engine bereitstellen, müssen Sie Ihre Google Cloud-Projekt-ID im Profiler-Agent mit dem Befehl start angeben. Eine Anleitung finden Sie unter Agent mit einem Google Cloud-Projekt verknüpfen.

  • Wenn Ihr Dienst außerhalb von Google Cloud ausgeführt wird, müssen Sie ein Dienstkonto erstellen und den Profiler-Agent mit Ihrem Google Cloud-Projekt verknüpfen. Weitere Informationen finden Sie unter Profilerstellung für Code außerhalb der Google Cloud Platform.

Profile eines bestimmten Typs sind nicht vorhanden

In diesem Abschnitt sind bestimmte Konfigurationen aufgeführt, mit denen Profile für einen oder mehrere Profiltypen nicht erfasst werden. Der erste Abschnitt bietet allgemeine Informationen dazu, die folgenden Abschnitte behandeln Probleme für bestimmte Sprachen.

Allgemeine Informationen

Wenn ein bestimmter Profiltyp angezeigt werden soll, aber keine Profile dieses Typs verfügbar sind, prüfen Sie Folgendes:

In den folgenden Abschnitten auf dieser Seite werden sprachspezifische Konfigurationen beschrieben, mit denen keine Daten für einen bestimmten Profiltyp erfasst werden.

Go: CPU-Zeitprofile werden für c-archives nicht erfasst

Wenn eine Go-Anwendung mit c-archive oder c-shared für das Flag -buildmode erstellt wird, sind die CPU-Zeitprofile standardmäßig deaktiviert. Heap-, Konflikt- und Thread-Profile werden aber erfasst. Weitere Informationen finden Sie unter GitHub issue #993: profiler not collecting CPU data for Go code in a c-archive.

Um dieses Problem zu beheben, müssen Sie die Erfassung von CPU-Zeitprofilen aktivieren, bevor Ihr Dienst profiler.Start aufruft, sowie einen Aufruf von signal.Notify(make(chan os.Signal), syscall.SIGPROF) hinzufügen. Weitere Informationen zu signal.Notify finden Sie unter func Notify.

Java: Heap-Profile werden nicht erfasst, wenn mehrere Profiler aktiviert sind

Sie haben mehrere Heap-Profiler für eine Java-Anwendung aktiviert und es werden keine Profile erfasst.

Der Java-Heap-Sampler ist als Solo-Agent-Funktion aktiviert. Dies hat zur Folge, dass immer nur ein Profiler verwendet werden kann. Es wurde ein Programmfehler geöffnet, damit Java mehrere Heap-Profiler unterstützt. Informationen zu diesem Programmfehler finden Sie unter Multi-Agent-Unterstützung für den Heap-Sampling-Mechanismus hinzufügen.

Um dieses Problem zu beheben, aktivieren Sie einen Profiler.

Python: Keine CPU-Zeitprofile und keine Wall-Profile bei Verwendung von uWSGI vorhanden

Wenn uWSGI mehrere Worker zur Verarbeitung von Anfragen verwendet, wird die Anwendungsinitialisierung standardmäßig nur im Primärprozess (master) durchgeführt. Die verzweigten Prozesse führen die Initialisierungssequenz nicht aus.

Wenn Sie den Profiler-Agent in der Initialisierungssequenz Ihrer Anwendung konfigurieren, konfigurieren Sie den Profiler-Agent in der AppConfig.ready()-Methode einer Django-Anwendung. Dann wird der Profiler-Agent nicht für die verzweigten Prozesse konfiguriert.

Um dieses Problem zu beheben, führen Sie die Anwendungsinitialisierung in allen Worker-Vorgängen mit der Einstellung true für das Flag lazy-apps aus.

Python: CPU-Zeitprofile vorhanden, aber keine Echtzeitprofile, wenn uWSGI verwendet wird

Der Wall-Profiler hängt vom Python-Signalmodul ab. Wenn der Python-Interpreter mit Threadunterstützung kompiliert wird, deaktiviert die Standardkonfiguration die benutzerdefinierte Signalverarbeitung für verzweigte Prozesse.

Um dieses Problem zu beheben, aktivieren Sie für uWSGI-Anwendungen die benutzerdefinierte Signalverarbeitung. Dazu legen Sie für das Flag py-call-osafterfork den Wert true fest.

Python: Keine Profile für verzweigte Vorgänge vorhanden

Die Profiler-Agents können nur ein Profil für den Prozess erstellen, der den Agent gestartet hat.

Um dieses Problem zu beheben, sollten Sie den Agent nach der Verzweigung initialisieren, wenn Ihre Anwendung verzweigte Prozesse verarbeitet und Profile aus den verzweigten Prozessen erfasst werden sollen.