2017-08-18 11 views
0

J'ai rencontré un problème avec une application Java que j'ai écrite causant des problèmes de performance matérielle. Le problème (j'en suis à peu près certain), c'est que quelques-unes des machines sur lesquelles je lance l'application ont seulement 1 Go de mémoire. Quand je lance mon application Java, je mets la taille du tas à -Xms 512m -Xmx 1024mLa mémoire s'épuise à côté de Xmx et Xms

Ma première question, est-ce que ma supposition est correcte, cela va évidemment causer des problèmes de performance parce que j'alloue toutes les machines mémoire pour le tas java?

Cela conduit à une autre question.Je lance jconsole sur l'application et le suivi de l'utilisation de la mémoire des applications.Ce que je vois est que l'application consomme environ 30mb au démarrage, arrive à environ 150mb et le garbage collector fonctionne et il redescend à 30 Mo. Ce que je vois aussi en utilisant le haut sur le pid est que l'application commence en utilisant environ 6% de mémoire puis grimpe lentement jusqu'à environ 20% .Je ne comprends pas cela. Pourquoi n'obtiendrait-il que jusqu'à 20% d'utilisation de la mémoire lorsque j'allouerai 1 Go. Ne devrait-il pas aller à 100%? . Aussi, pourquoi utilise-t-il autant de mémoire (20%) quand il ne semble pas que l'application utilise plus de 150mb?

Je pense qu'il est assez évident que j'ai besoin d'ajuster mon Xms et Xmx et cela devrait résoudre le problème, mais j'essaie de mieux comprendre ce qui se passe exactement.

Répondre

1

Deux possibilités pour l'utilisation de la mémoire:

Votre application ne fonctionne tout simplement pas utiliser cette quantité de mémoire

Ou

Votre application ne pas utiliser autant de mémoire assez vite.

Qu'est-ce qui se passe:

Le garbage collector a plusieurs points où il exécutera:

  1. Juste prévu: Il va nettoyer facile à enlever les objets

  2. Collection complète: Cela va lorsque vous atteignez les limites de la mémoire définie.

Si les options 1, le général beaucoup plus faible incidence collection rapide, peut garder votre utilisation de la mémoire sous contrôle, il ne touche pas la collection complète à moins qu'il les options JVM GC sont définies pour exécuter un plein sur un calendrier.

Avec votre application, je commencerais à définir des valeurs xmx/xms plus basses afin de laisser plus de ressources garanties pour le système d'exploitation, et peut-être que certaines paginations seront évitées.