Skip to content

Commit

Permalink
📝 adding heap dump + JFR recording process
Browse files Browse the repository at this point in the history
  • Loading branch information
arthuRHD committed Aug 28, 2024
1 parent 1b533d3 commit 2c32555
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion docs/backend/backend-java.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,35 @@ ENTRYPOINT ["java", "-XX:+UnlockExperimentalVMOptions", "-Djava.security.egd=fil

## Déployer un backend en Spring Boot sur AWS

WIP
WIP

## Faire un heap dump d'un container light java déployé sur k8s

On utilise l'utilitaire `jcmd` packagé avec tout openjdk.

Quand on a très peu d'outils à disposition on devient créatif. Pour copier des fichiers vers l'extérieur il faut avoir le binaire `tar` d'installé dans le container pour pouvoir executer la commande `kubectl cp <source> <desitination>`.

Quand il n'est pas installer, on peut toujours utiliser la sortie standard et piper ça dans un fichier. On encode en base64 pour éviter de corrompre le fichier avec un mauvais affichage.

```sh
kubectl exec <pod> -- bash -c "jcmd 1 GC.run" # Pour clean avant de record la mémoire
sleep 10
kubectl exec <pod> -- bash -c "jcmd 1 GC.heap_dump filename=/tmp/dump.hprof"
kubectl exec <pod> -- bash -c "base64 /tmp/dump.hprof > /tmp/dump64.hprof"
kubectl exec <pod> -- bash -c "cat /tmp/dump64.hprof" | base64 -d > ~/dump.hprof
```

Il ne vous reste plus qu'à le loader dans VisualVM ou JProfiler.

## Faire un recording JFR d'un container light java déployé sur k8s

Même process pour le transfert de fichier, il n'y a que la commande qui change.

```sh
kubectl exec <pod> -- bash -c "jcmd 1 JFR.start duration=1h delay=5s filename=/tmp/recording.jfr"
# Maintenant on fait nos opérations pendant une heure
kubectl exec <pod> -- bash -c "base64 /tmp/recording.jfr > /tmp/recording64.jfr"
kubectl exec <pod> -- bash -c "cat /tmp/recording64.jfr" | base64 -d > ~/recording.jfr
```

Et ensuite on le load dans VisualVM ou JProfiler.

0 comments on commit 2c32555

Please sign in to comment.