J'exécute Kubernetes sur CentOS 7, et il ne semble pas que la version de perf
est conscient des espaces de noms.
Si l'on exécute perf sur le PID du nœud hôte (nœud hôte trouvé avec kubectl describe pods --namespace
) Je reçois un message d'erreur indiquant que les symboles ne sont pas trouvés. Cela semble être dû au fait qu'il recherche le chemin du fichier relatif au conteneur mais sur le système de fichiers du nœud hôte.
Si je copie l'exe (un Go exe qui inclut les symboles) vers le chemin attendu sur le nœud hôte (soit avec la commande kubectl cp ...
ou en trouvant le fichier sous overlay2 dans le dossier /var/lib/docker
) alors perf top -p <pid>
fonctionne à partir du nœud hôte puisqu'il peut trouver les mêmes symboles qui correspondent à l'exe dans le conteneur.
Y a-t-il un moyen plus efficace et plus propre de faire fonctionner perf
contre un processus s'exécutant dans un conteneur avec un hôte CentOS 7 ?
Références :
- http://blog.alicegoldfuss.com/making-flamegraphs-with-containerized-java/ section "Le hack"
- Recettes de Kernel 2017 : Utilisation de Linux perf à Netflix (SlideShare) - Diapositive 67.