J'ai un problème avec une application Java. Hier, quand je déployé à une série de tests, nous avons remarqué que notre machine ont commencé à délaisser, même si ce n'est pas une application réelle de monstre, si vous savez ce que je veux dire. Quoi qu'il en soit, j'ai vérifié les résultats de haut et vu qu'il mange autour de 100 Mo de mémoire (RES en haut) J'ai essayé de la mémoire et le profil de vérifier s'il y a une fuite de mémoire, mais je ne pouvais pas trouver un. Il y avait un PreparedStatement non fermé, que j'ai corrigé, mais cela ne voulait pas dire grand-chose. J'ai essayé régler le min et la taille de tas max (certains ont dit que la taille min de tas n'est pas nécessaire), et il n'a pas fait aucune différence.Java utilisation de la mémoire haute
Voici comment je lance maintenant:
#!/bin/sh
$JAVA_HOME/bin/java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9025 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -XX:MaxPermSize=40m -Xmx32M -cp ./jarName.jar uk.co.app.App app.properties
Voici le résultat de top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16703 root 20 0 316m 109m 6048 S 0.0 20.8 0:14.80 java
La chose que je ne comprends pas que je configure max PermSize et max Heap taille, qui ajoute jusqu'à 72mb. Ce qui est suffisant, l'application fonctionne bien. Pourquoi mange-t-il encore 109Mo de mémoire et qu'est-ce qui le mange? C'est une différence de 37mb, ce qui est assez élevé. (34%). Je ne pense pas que ce soit une fuite de mémoire, car max taille du tas est réglé et il n'y a pas d'erreur sur la mémoire, ou quoi que ce soit. Une chose intertesting peut-être que j'ai fait une décharge de tas avec VisualVM, puis vérifié avec EclipseMAT et il a dit qu'il y a une fuite possible dans un chargeur de classe. Voici ce qu'il dit:
Le classloader/composant "sun.misc.Launcher $ AppClassLoader @ 0x87efa40" (64,90 9,807,664 occupe%) octets. La mémoire est accumulée dans un cas de « court [] [] » chargé par « » .Keywords sun.misc.Launcher $ AppClassLoader @ 0x87efa40
Je ne peux pas faire beaucoup de cela, mais peut être utile.
Merci pour votre aide à l'avance.
EDIT
J'ai trouvé celui-ci, peut-être il n'y a rien que je peux faire ... Tomcat memory consumption is more than heap + permgen space
J'ai fait du profilage, comme je l'ai écrit, et je n'ai pas pu identifier de problèmes. –
Nous vous recommandons d'essayer ces paramètres: -XX: MaxHeapFreeRatio et -XX: MinHeapFreeRatio. Voir plus de détails à http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html sous 'Options de performance' – Saurabh