Ceci est un mémo lorsque j'étais préoccupé par les performances de Dataflow. La surveillance cloud, Cloud Profiler et le vidage de la mémoire peuvent être utilisés avec Dataflow.
Cloud monitoring Vous pouvez surveiller l'utilisation de la mémoire de la JVM avec la surveillance Cloud.
Il est désactivé par défaut, donc à --experiments = enable_stackdriver_agent_metrics lors du démarrage du pipeline (ou de la création du modèle) ) Est autorisé (*).
PubSubToText sur Modèles fournis par Google Essayez-le avec cloud / teleport / templates / PubsubToText.java). La deuxième ligne à partir du bas est la pièce ajoutée.
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"
Après avoir démarré la tâche, vous pouvez vérifier l'index avec Cloud Monitoring. Par défaut, c'est par instance, mais vous pouvez également Grouper par nom de travail.
Je l'ai aussi essayé avec Word Count, mais il n'a pas été affiché dans Monitoring ... (La cause n'a pas été étudiée. Exécution Le temps est-il court?)
Stackdriver Profiler C'est la méthode introduite par une personne à l'intérieur de Google à Meidum.
Stackdriver Profiler semble pouvoir obtenir du tas en Java (https://cloud.google.com/profiler/docs/concepts-profiling?hl=ja#types_of_profiling_available), mais je ne savais pas s'il pouvait être pris dans Dataflow ...
L'option profilingAgentConfiguration = '{\ "APICured ": true}' doit être activée. Il peut également être utilisé en même temps que Cloud Monitoring.
* 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"
Pour lire le graphique, consultez les pages [Quick Start] de Stackdriver Profiler (https://cloud.google.com/profiler/docs/quickstart?hl=ja) et Frame Graph Description. Veuillez vous référer à / profiler / docs / concepts-flame? Hl = ja).
[Introduction](https://github.com/GoogleCloudPlatform/community/blob/master/tutorials/dataflow-debug-oom-conditions] sur Google Cloud Platform Community /index.md), mais vous pouvez également utiliser le vidage de la mémoire standard. Contrairement aux deux méthodes mentionnées ci-dessus, vous examinerez chaque instance plutôt que l'ensemble du travail.
Comment faire une décharge
Trois types sont introduits. Cette fois, je vais essayer de télécharger à partir d'un travailleur.
Suivez les étapes ci-dessous:
Comme il n'y a pas d'options ou de précautions spéciales, le démarrage du pipeline est omis.
Entrez le travailleur Dataflow et effectuez un vidage du tas.
L'instance GCE est étiquetée avec l'ID de tâche Dataflow et le nom de la tâche, afin que vous puissiez identifier l'instance (exemple ci-dessous).
gcloud compute instances list --filter='labels.dataflow_job_name=${job_name}'
Créez un tunnel SSH:
gcloud compute ssh --project=$PROJECT --zone=$ZONE \
$WORKER_NAME --ssh-flag "-L 8081:127.0.0.1:8081"
Ouvrez http://127.0.0.1:8081/heapz dans votre navigateur. Cela prend un certain temps (environ 10 minutes avec n1-standard-4).
Affichez le vidage avec votre outil préféré, tel que VisualVM. Vous pouvez voir l'état des threads et des objets.
Je pense que mes prédécesseurs ont écrit différentes manières de lire le vidage du tas, alors faites de votre mieux (Java Performance).
Il y a quelques mises en garde concernant le téléchargement du worker que j'ai essayé cette fois:
Recommended Posts