Java (Yeah Java ...) Application fonctionnant sur Centos 7. Après un certain temps, il existe de nombreux fichiers "supprimés" qui me dérangent.
pour les fichiers supprimés utilisés (pas le problème):
lsof | grep "(deleted)"
Je les ai trouvés dans/proc/pid/fd/... et ma question est de savoir comment puis-je tuer/les supprimer sans tuer le processus (processus doit être exécuté 24/7).
J'ai vu sur Google que je peux utiliser l'outil GDB, mais je ne sais pas comment l'utiliser. Pouvez-vous m'aider s'il vous plaît (juste pour écrire un manuel étape par étape)?
J'aimerai entendre d'autres suggestions si vous avez.
utilisez lsof -p $PID
et trouvez le descripteur de fichier (4ème colonne)
root@blah:~# lsof -p 1737 | grep "(deleted)" Apache2 1737 root 6w REG 0,25 0 207401 (deleted)/var/log/Apache2/other_vhosts_access.log
La 4ème colonne est de 6W, ce qui signifie le descripteur de fichier 6 et il a été ouvert pour l'écriture (W).
Puis:
gdb -p $PID p close($FD)
par exemple:
gdb -p 1737 ..... (gdb) p close(6) $1 = 0 ... Quit anyway? (y or n) y Detaching from program: /usr/lib/Apache2/mpm-prefork/Apache2, process 1737
Utilisez la commande suivante pour trouver les descripteurs de fichiers de fichiers supprimés et vous pouvez les tronquer ensuite ensuite
trouver/proc/-mindepth 3 -MaxDepth 3\-regex '/ proc/[1-9] [0-9] / FD/[1-9] [0-9]' -TYPE l -lname '* (supprimé)'\-printf '% p\n% l\n' 2>/dev/null