Bonjour, nous rencontrons une exception de mémoire insuffisante pour l'un de nos processus qui s'exécute dans un environnement Unix. Comment identifier le bogue (nous avons observé qu'il y a très peu de chances de fuites de mémoire dans notre processus Java) ? Que devons-nous analyser d'autre pour trouver la cause racine ?
Réponses
Trop de publicités?Je vous suggérerais d'utiliser un profileur comme YourKit (page d'accueil) pour que vous puissiez facilement trouver ce qui alloue autant de mémoire.
En tout cas, vous devriez vérifier les paramètres spécifiés pour votre JVM pour comprendre si vous avez besoin de plus de mémoire heap pour votre programme. Vous pouvez le définir en spécifiant les paramètres -X
:
java -Xmx2g -Xms512m
démarrera la JVM avec un maximum de 2 Go de heap et une taille de 512 Mo au démarrage.
S'il n'y a pas de fuites de mémoire, alors l'application a besoin de plus de mémoire. Rencontrez-vous un manque de mémoire heap, ou de mémoire perm ou de mémoire native? Pour la mémoire heap et la mémoire perm, vous pouvez augmenter l'allocation en utilisant les arguments -Xmx ou -XX:PermSize respectivement.
Mais essayez d'abord d'utiliser un profileur pour vérifier que votre application ne fuit vraiment pas de mémoire.