[JAVA] Jetez un œil au profilage et au vidage avec Dataflow

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.

Comprendre

Essaie

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.

Cloud Monitoring例

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.

Comprendre

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 ...

Essaie

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"

経過時間

CPU時間

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).

Vidage de la mémoire

[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.

Comprendre

Essaie

Suivez les étapes ci-dessous:

  1. Démarrez le pipeline
  2. Créez un vidage de tas
  3. Téléchargez localement
  4. Jetez un œil

Comme il n'y a pas d'options ou de précautions spéciales, le démarrage du pipeline est omis.

Créer un vidage de tas

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"

Télécharger localement

Ouvrez http://127.0.0.1:8081/heapz dans votre navigateur. Cela prend un certain temps (environ 10 minutes avec n1-standard-4).

Regarde

Affichez le vidage avec votre outil préféré, tel que VisualVM. Vous pouvez voir l'état des threads et des objets.

VisualVMサマリー

VisualVMスレッド

VisualVMオブジェクト

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).

point important

Il y a quelques mises en garde concernant le téléchargement du worker que j'ai essayé cette fois:

Recommended Posts

Jetez un œil au profilage et au vidage avec Dataflow
Jetez un œil au modèle Django.
Regardez de plus près le tutoriel Kaggle / Titanic
Jetez un œil à l'arborescence des exceptions intégrée à Python
Jetons un coup d'œil à la carte des fonctionnalités de YOLO v3
Jetez un œil à l'arborescence des exceptions intégrée dans Python 3.8.2
Jetons un coup d'œil à l'incendie de forêt sur la côte ouest des États-Unis avec des images satellites.
Jetons un coup d'œil au code Scapy. Surcharge des méthodes spéciales __div__, __getitem__.
L'histoire d'avoir un regard doux et douloureux sur les utilisateurs personnalisés sur Django
Couper et prendre une moyenne mobile pondérée
Un mémo contenant Python2.7 et Python3 dans CentOS
Implémenter un modèle avec état et comportement
Jetons un coup d'œil au code Scapy. Comment traitez-vous la structure?
Pratique de création d'une plateforme d'analyse de données avec BigQuery et Cloud DataFlow (traitement de données)
Connectez Scratch X et Digispark avec bouteille
Construire un environnement python avec virtualenv et direnv
Créez un environnement virtuel avec pyenv et venv
Lancer un serveur Web avec Python et Flask
Airtest, une question à la fois. Test E2E de l'application Unity commençant par Airtest et Poco