comment réduire le printemps de démarrage utilisation de la mémoire?
Je suis en utilisant le printemps de démarrage de développer l'application client.
et quand exécuter printemps de démarrage de l'application(à l'aide de entièrement exécutable jar), l'utilisation de la mémoire est d'environ 190 millions de dollars en x64, server, et 110 dans des serveurs x86.
mon option jvm est (-Xmx64M -Xms64M -XX:MaxPermSize=64M -serveur),
pourquoi en x64, server, utilisation de la mémoire est si grand?
comment réduire l'utilisation de la mémoire en dessous de 150M?
grâce.
- x64 (64 bits) les pointeurs sont deux fois plus grandes que les x86 (32 bits) pointeurs, l'utilisation de la mémoire en mode 64 bits sera par la nécessité d'être plus grand.
- oui, mais je ne sais pas ce que la mémoire est utilisée à l'exception de tas + Perm. J'ai mis le max de la taille du segment de 64 m, max taille permanente 64M, mais pourquoi autour de 60M(190M - 64Mx2) est utilisé, et je ne peux pas la réduire.
- vous avez mentionné ce qui est à l'origine de l'augmentation de la mémoire. Mais comment la réduire ?
- Un peu plus tard, mais ce post peut aider dzone.com/articles/...
Vous devez vous connecter pour publier un commentaire.
Peu tard pour le jeu ici, mais j'ai souffert du même problème avec un conteneur de Printemps de l'application de Démarrage sur Docker. Le minimum que vous aurez à autour de 72M mémoire totale de la plus simple du Printemps de Démarrage des applications avec un seul contrôleur et Tomcat intégré. Jeter au Printemps de Données de REPOS, le Ressort de Sécurité et de quelques entités JPA et vous serez à la recherche à 200M-300M minimum. Vous pouvez obtenir un simple Ressort de Démarrage de l'app vers le bas environ à 72M total à l'aide des options JVM.
Avec
-XX:+UseSerialGC
Cela permettra d'effectuer l'opération garbage collection en ligne avec le fil de l'allocation de la mémoire dans la mémoire au lieu d'un GC thread(s)Avec
-Xss512k
Cela permettra de limiter chaque fils de la pile mémoire de 512 KO au lieu de la valeur par défaut de 1 moAvec
-XX:MaxRAM=72m
Cela permettra de limiter la JVM des calculs pour le tas et non de segment de mémoire gérée à l'intérieur des limites de cette valeur.En sus des options JVM vous pouvez également utiliser la propriété suivante à l'intérieur de votre
application.properties
fichier:server.tomcat.max-threads=5
Cela permettra de limiter le nombre de requête HTTP gestionnaire de threads à 1 (valeur par défaut: 50)Voici un exemple de
docker stats
de l'exécution d'un très Printemps simple application de Démarrage avec les limites ci-dessus et avec le docker-m 72m
argument. Si je baisse les valeurs plus bas que ce que je ne peut pas obtenir l'application à lancer.83ccc9b2156d: Mem Usage: 70.36MiB /72MiB | Mem Percentage: 97.72%
Et ici vous pouvez voir une ventilation de tous les indigènes et java de segment de mémoire à la sortie.
Ne vous attendez pas à obtenir toute bonne performance de ce soit, comme j'imagine que la GC serait en cours d'exécution fréquemment avec cette configuration, car il n'a pas beaucoup de mémoire libre pour jouer avec
Après recherche, j'ai trouvé, c'est déjà avoir la réponse dans stackoveflow.
Printemps de Démarrage de la mémoire de la consommation augmente au-delà d'option-Xmx
parce que le printemps de démarrage commence autour de 50 threads par défaut pour le service http(Tomcat ou Ressac, la Jetée), et son utilisation 1 MO par thread(jvm 64 bits par défaut).
De telle SORTE que leur jvm 64 bits, l'utilisation de la mémoire est
tas(64M) + Permgen(max 64M) + piles de threads(1M x 50+) + native poignées.
références:
Vous utilisez l'option-XX:+UseSerialGC comme Argument JVM pour spécifier Série Garbage Collector qui est le meilleur choix pour réduire la Mémoire de Tas .