[GO] Sehen Sie sich das Profiling und Dumping mit Dataflow an

Dies ist ein Memo, als ich über die Leistung von Dataflow besorgt war. Cloud-Überwachung, Cloud-Profiler und Speicherauszug können mit Dataflow verwendet werden.

Cloud monitoring Sie können die Speichernutzung der JVM mithilfe der Cloud-Überwachung überwachen.

Verstehen

Ausprobieren

Es ist standardmäßig deaktiviert, also bei --experiments = enable_stackdriver_agent_metrics beim Starten der Pipeline (oder beim Erstellen der Vorlage) ) Aktiviert (*).

PubSubToText von Von Google bereitgestellten Vorlagen Versuchen Sie es mit cloud / teleport / templates / PubsubToText.java). Die zweite Zeile von unten ist der hinzugefügte Teil.

 mvn compile exec:java \
 -Dexec.mainClass=com.google.cloud.teleport.templates.PubSubToText \
 -Dexec.cleanupDaemonThreads=false \
 -Dexec.args=" \
 --project=${PROJECT_ID} \
 --stagingLocation=gs://${PROJECT_ID}/dataflow/pipelines/${PIPELINE_FOLDER}/staging \
 --tempLocation=gs://${PROJECT_ID}/dataflow/pipelines/${PIPELINE_FOLDER}/temp \
 --runner=DataflowRunner \
 --windowDuration=2m \
 --numShards=1 \
 --inputTopic=projects/${PROJECT_ID}/topics/windowed-files \
 --outputDirectory=gs://${PROJECT_ID}/temp/ \
 --outputFilenamePrefix=windowed-file \
 --experiments=enable_stackdriver_agent_metrics  \
 --outputFilenameSuffix=.txt"

Nach dem Starten des Jobs können Sie den Index mit Cloud Monitoring überprüfen. Standardmäßig ist es pro Instanz, aber Sie können auch nach Jobnamen gruppieren.

Cloud Monitoring例

Ich habe es auch mit Word Count versucht, aber es wurde nicht in Monitoring angezeigt ... (Die Ursache wurde nicht untersucht. Ausführung Ist die Zeit kurz?)

Stackdriver Profiler Dies ist die Methode, die von einer Person in Google unter [Meidum] eingeführt wurde (https://medium.com/google-cloud/profiling-dataflow-pipelines-ddbbef07761d0).

Verstehen

Stackdriver Profiler scheint in der Lage zu sein, Heap in Java abzurufen (https://cloud.google.com/profiler/docs/concepts-profiling?hl=ja#types_of_profiling_available), aber ich wusste nicht, ob es in Dataflow übernommen werden kann ...

Ausprobieren

Die Option profilingAgentConfiguration = '{\ "APICurated ": true}' muss aktiviert sein. Es kann auch gleichzeitig mit der Cloud-Überwachung verwendet werden.

 * mvn compile exec:java \
 -Dexec.mainClass=com.google.cloud.teleport.templates.PubSubToText \
 -Dexec.cleanupDaemonThreads=false \
 -Dexec.args=" \
 --project=${PROJECT_ID} \
 --stagingLocation=gs://${PROJECT_ID}/dataflow/pipelines/${PIPELINE_FOLDER}/staging \
 --tempLocation=gs://${PROJECT_ID}/dataflow/pipelines/${PIPELINE_FOLDER}/temp \
 --runner=DataflowRunner \
 --windowDuration=2m \
 --numShards=1 \
 --inputTopic=projects/${PROJECT_ID}/topics/windowed-files \
 --outputDirectory=gs://${PROJECT_ID}/temp/ \
 --outputFilenamePrefix=windowed-file \
 --experiments=enable_stackdriver_agent_metrics  \
 --outputFilenameSuffix=.txt"

経過時間

CPU時間

Informationen zum Lesen des Diagramms finden Sie unter [Schnellstart] von Stackdriver Profiler (https://cloud.google.com/profiler/docs/quickstart?hl=ja) und Beschreibung des Rahmendiagramms. Bitte beziehen Sie sich auf / profiler / docs / Konzepte-Flamme? Hl = ja).

Speicherauszug

[Einführung](https://github.com/GoogleCloudPlatform/community/blob/master/tutorials/dataflow-debug-oom-conditions] unter Google Cloud Platform Community /index.md), aber Sie können auch den Standardspeicherauszug verwenden. Im Gegensatz zu den beiden oben genannten Methoden betrachten Sie jede Instanz und nicht den gesamten Job.

Wie man einen Dump nimmt

Es werden drei Typen vorgestellt. Dieses Mal werde ich versuchen, von einem Arbeiter herunterzuladen.

Verstehen

Ausprobieren

Folgen Sie den unteren Schritten:

  1. Starten Sie die Pipeline
  2. Erstellen Sie einen Heap-Dump
  3. Laden Sie lokal herunter
  4. Schauen Sie mal rein

Da es keine besonderen Optionen oder Vorsichtsmaßnahmen gibt, wird das Starten der Pipeline weggelassen.

Erstellen eines Heap-Dumps

Geben Sie den Dataflow-Worker ein und erstellen Sie einen Heap-Dump.

Die GCE-Instanz ist mit der Datenfluss-Job-ID und dem Jobnamen gekennzeichnet, damit Sie die Instanz identifizieren können (Beispiel unten).

gcloud compute instances list --filter='labels.dataflow_job_name=${job_name}'

Erstellen Sie einen SSH-Tunnel:

gcloud compute ssh --project=$PROJECT --zone=$ZONE \
  $WORKER_NAME --ssh-flag "-L 8081:127.0.0.1:8081"

Lokal herunterladen

Öffnen Sie http://127.0.0.1:8081/heapz in Ihrem Browser. Es dauert eine ganze Weile (ca. 10 Minuten mit n1-Standard-4).

Schau mal

Zeigen Sie den Speicherauszug mit Ihrem bevorzugten Tool an, z. B. VisualVM. Sie können den Status von Threads und Objekten anzeigen.

VisualVMサマリー

VisualVMスレッド

VisualVMオブジェクト

Ich denke, dass meine Vorgänger verschiedene Methoden zum Lesen des Heap-Dumps geschrieben haben. Geben Sie also bitte Ihr Bestes (Java Performance).

wichtiger Punkt

Es gibt einige Einschränkungen bezüglich des Downloads von dem Worker, den ich dieses Mal ausprobiert habe:

Recommended Posts

Sehen Sie sich das Profiling und Dumping mit Dataflow an
Schauen Sie sich die Django-Vorlage an.
Schauen Sie sich das Kaggle / Titanic-Tutorial genauer an
Sehen Sie sich die in Python integrierte Ausnahmebaumstruktur an
Werfen wir einen Blick auf die Feature-Map von YOLO v3
Sehen Sie sich die in Python 3.8.2 integrierte Ausnahmebaumstruktur an
Schauen wir uns den Waldbrand an der Westküste der USA mit Satellitenbildern an.
Werfen wir einen Blick auf den Scapy-Code. Überladung spezieller Methoden __div__, __getitem__.
Die Geschichte, einen süßen und schmerzhaften Blick auf benutzerdefinierte Benutzer auf Django zu werfen
Schneiden Sie und nehmen Sie einen gewichteten gleitenden Durchschnitt
Ein Memo mit Python2.7 und Python3 in CentOS
Implementieren Sie ein Modell mit Status und Verhalten
Werfen wir einen Blick auf den Scapy-Code. Wie bearbeiten Sie die Struktur?
Praxis der Erstellung einer Datenanalyseplattform mit BigQuery und Cloud DataFlow (Datenverarbeitung)
Verbinden Sie Scratch X und Digispark mit der Flasche
Erstellen einer Python-Umgebung mit virtualenv und direnv
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Starten Sie einen Webserver mit Python und Flask
Airtest, eine Frage nach der anderen. Unity App E2E Test beginnend mit Airtest und Poco