Exploitation et conformité

Heap dump et RGPD : un fichier .hprof contient des données personnelles, traitez-le comme tel

Exploitation et conformité · · Publié le 2026-11-10

Quand une application Java manque de mémoire, le premier réflexe est de demander un heap dump. C'est le bon réflexe technique. Mais ce fichier est une photographie de la mémoire de l'application à un instant donné : si elle traite des usagers, des clients ou des patients, leurs données sont dedans, en clair. En France, cela fait du heap dump un objet soumis au RGPD, avec des conséquences très pratiques sur la façon de le produire, de le transmettre et de l'effacer.

Ce que contient réellement un fichier .hprof

Le format HPROF enregistre chaque objet vivant du tas : sa classe, ses champs et leurs valeurs. Les chaînes de caractères y figurent en entier, les tableaux d'octets aussi. Dans une application de gestion ordinaire, on y retrouve typiquement :

Un outil comme Eclipse MAT permet d'interroger tout cela en quelques clics, et une simple commande strings sur le fichier suffit souvent à faire apparaître des adresses électroniques. Notre guide en anglais sur l'analyse d'un heap dump détaille la partie technique ; cet article traite de ce que la loi en fait.

Ce que dit le RGPD

Le règlement définit les données à caractère personnel comme « toute information se rapportant à une personne physique identifiée ou identifiable » (article 4). Un heap dump qui contient ne serait-ce qu'un identifiant client entre dans cette définition. Trois conséquences en découlent.

Le texte consolidé est disponible sur le site de la CNIL.

Journaux GC et thread dumps : moins sensibles, pas neutres

Les journaux du ramasse-miettes (-Xlog:gc*) ne contiennent que des tailles, des durées et des noms de régions : ils ne posent en général aucun problème. Les thread dumps contiennent des noms de threads et des piles d'appels, parfois des noms de méthodes métier ; ils peuvent révéler un identifiant si l'application nomme ses threads d'après la requête traitée. Les enregistrements JDK Flight Recorder se situent entre les deux : selon la configuration, ils peuvent capturer des valeurs de propriétés système, des arguments de ligne de commande ou des chemins de fichiers. Relisez ce qu'ils contiennent avant de les envoyer hors de l'équipe.

La CNIL a précisé, dans sa recommandation sur la journalisation (délibération n° 2021-122 du 14 octobre 2021), qu'elle recommande de manière générale de conserver les traces d'accès des utilisateurs habilités pendant une durée comprise entre six mois et un an. Ce texte vise les journaux d'accès aux systèmes, pas les dumps mémoire ; il donne toutefois un ordre de grandeur utile : un fichier de diagnostic, lui, se compte en jours ou en semaines.

Une procédure en six points

1. Décider avant l'incident

L'option -XX:+HeapDumpOnOutOfMemoryError est désactivée par défaut. Si vous l'activez, et c'est souvent utile, fixez aussi -XX:HeapDumpPath vers un répertoire dédié, sur un volume chiffré, accessible aux seuls administrateurs de l'application. Inscrivez ce choix au registre des traitements ou dans la documentation de sécurité du service : c'est un traitement de données qui découle du traitement principal.

java -XX:+HeapDumpOnOutOfMemoryError \
     -XX:HeapDumpPath=/var/diag/monappli/ \
     -XX:HeapDumpGzipLevel=1 \
     -jar monappli.jar

HeapDumpGzipLevel (0 par défaut, donc sans compression) réduit la taille du fichier, mais pas sa sensibilité : un fichier compressé n'est pas chiffré.

2. Produire à la demande, avec une trace

Pour un dump manuel, jcmd <pid> GC.heap_dump -gz=1 /var/diag/monappli/dump.hprof.gz écrit un fichier compressé. Notez dans le ticket d'incident qui l'a demandé, pourquoi, et où il se trouve. Un dump sans propriétaire est un dump que personne ne supprimera.

3. Analyser sur place si possible

L'analyse peut souvent se faire sur une machine de l'équipe d'exploitation, dans le même périmètre de sécurité que la production. Eclipse MAT peut produire des rapports (« leak suspects », histogramme des classes) qui ne contiennent que des noms de classes et des tailles : ce sont ces rapports qu'il faut partager, pas le fichier brut.

4. Transmettre le moins possible

Si un éditeur ou un prestataire demande le dump, vérifiez d'abord que le contrat prévoit ce cas : le prestataire agit alors comme sous-traitant au sens du RGPD. Transmettez par un canal chiffré, jamais en pièce jointe d'un ticket public ni sur un service de partage de fichiers grand public. Si un histogramme (jcmd <pid> GC.class_histogram) suffit au diagnostic, il ne contient aucune donnée métier.

5. Reproduire avec des données fictives

Une fuite de mémoire se reproduit généralement en recette, avec un jeu de données anonymisé ou synthétique. Un dump produit dans ces conditions peut circuler librement. C'est la meilleure option dès que le problème est reproductible.

6. Supprimer et le noter

Fixez une durée de vie : par exemple, suppression à la clôture de l'incident, et purge automatique du répertoire de diagnostic au-delà de quelques jours. Supprimez aussi les copies sur les postes des analystes. Une tâche planifiée qui efface les fichiers *.hprof* anciens évite qu'un dump oublié devienne, deux ans plus tard, une violation de données.

Conteneurs et Kubernetes

Dans un conteneur, HeapDumpPath pointe souvent vers un volume persistant pour que le fichier survive au redémarrage provoqué par l'erreur. Ce volume devient alors un stockage de données personnelles : chiffrement, droits d'accès restreints et purge s'appliquent. À l'inverse, un dump écrit dans le système de fichiers éphémère du conteneur disparaît au redémarrage, ce qui protège les données mais prive aussi du diagnostic. Le compromis le plus courant est un volume dédié, monté uniquement sur les pods concernés, avec une politique de rétention courte. Le dimensionnement mémoire lui-même est traité dans notre guide JVM in containers.

À retenir. Un heap dump est une copie des données que l'application traite. Produisez-le dans un lieu protégé, partagez des rapports plutôt que le fichier, reproduisez avec des données fictives quand c'est possible, et supprimez-le dès que le diagnostic est posé. Pour d'autres réglages propres à la production en France, voir aussi notre article sur les fuseaux horaires et le changement d'heure dans la JVM.

Sources