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.
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.
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).
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 ...
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"
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).
[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.
Folgen Sie den unteren Schritten:
Da es keine besonderen Optionen oder Vorsichtsmaßnahmen gibt, wird das Starten der Pipeline weggelassen.
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"
Öffnen Sie http://127.0.0.1:8081/heapz in Ihrem Browser. Es dauert eine ganze Weile (ca. 10 Minuten mit n1-Standard-4).
Zeigen Sie den Speicherauszug mit Ihrem bevorzugten Tool an, z. B. VisualVM. Sie können den Status von Threads und Objekten anzeigen.
Ich denke, dass meine Vorgänger verschiedene Methoden zum Lesen des Heap-Dumps geschrieben haben. Geben Sie also bitte Ihr Bestes (Java Performance).
Es gibt einige Einschränkungen bezüglich des Downloads von dem Worker, den ich dieses Mal ausprobiert habe:
Recommended Posts