Impossible d'allouer suffisamment de mémoire à Java
Nous avons une application qui a été en cours d'exécution fine pour un an. C'est une application web s'exécutant sous Tomcat 5.5 + JDK 1.5 sous Microsoft Cluster sous Windows Server 2003, Enterprise Edition Service Pack 2. Le serveur dispose de 11 go de RAM (je sais que c'est inutile!) avec la description suivante "d'Extension d'Adresse Physique": je ne sais pas ce que cela signifie.
Le service Tomcat est configuré avec les paramètres suivants: -Xmx1024m -Xms128m
Depuis la semaine dernière, le service ne veulent pas plus et s'arrête avec le message d'erreur suivant: "impossible d'allouer suffisamment de mémoire".
Nous avons essayé plusieurs tests:
java -Xmx1024m -version
=> n'a pasjava -Xmx758m -version
=> n'a pasjava -Xmx512m -version
=> Passé
Nous pouvons donc utiliser moins de mémoire pour la taille maximale du tas, mais ce n'est pas une solution acceptable, car le nombre d'utilisateurs augmentera dans quelques mois et nous avons besoin de définir la taille maximale du tas de 1024Mb.
Aussi je ne comprends pas pourquoi cela a bien fonctionné et puis, soudain, il a cessé de travailler! Il semble que le système d'exploitation est maintenant impossible d'allouer de la mémoire contiguë, ou quelque chose d'autre (taille de fichier de page, l'utilisateur de l'allocation de mémoire, ...)
Il est assez difficile de savoir si quelque chose a changé (OS patch, configuration, ...) parce que l'application web est en cours d'exécution sur le serveur du client et nous n'avons pas accès.
-Xmx1024m -Xmx128m
, vraiment? Voulez-vous dire -Xmx1024m -Xms128m
(note de l'-Xms)?Adresse physique de l'Extension: en.wikipedia.org/wiki/Physical_Address_Extension - Cela signifie que les processeurs 32 bits peuvent accéder à plus de 4 GO de ram.
Aussi j'ai oublié de dire que nous avons trouvé un JRE 1.6 installé dans "C:\Program Files\Java\jre1.6.0_07". Le JDK (c'est à dire 1.5) n'est pas dans le chemin d'accès au système, mais les tests ci-dessus utilisé le JDK et non pas le JRE. Aussi Tomcat est configuré pour utiliser le JDK.
Ouups sorru: Oui, c'est -Xmx1024m -Xms128m
Essayez d'autres JVM - Dernière 1.6, la dernière version 1.5, les dernières 1.7. Il y a peut être quelque chose de mal avec la JVM
OriginalL'auteur Eric Taix | 2011-04-26
Vous devez vous connecter pour publier un commentaire.
Java nécessite continu de la mémoire. Sur 32-bits des Systèmes d'exploitation de cela vous limite entre 1,2 et 1,4 GO sur Windows. Toutefois, si votre mémoire est fragmentée à cause d'autres programmes qui sont en cours d'exécution, vous pouvez obtenir une beaucoup plus petite région de la mémoire.
Vous n'obtiendrez pas ce problème avec un système d'exploitation 64 bits et vous pouvez même attribuer beaucoup plus de mémoire de la jVM (si vous utilisez une JVM 64 bits)
OriginalL'auteur Peter Lawrey
J'ai quelques news au sujet de mon problème.
Ceci semble être dû à une mise à jour de sécurité de Windows ! Ce Microsoft mise à jour de sécurité empêche les applications java d'allouer une grande quantité de mémoire contiguë...
Plus d'informations ici: http://support.microsoft.com/kb/971812
Nous allons vérifier si le patch résout ce problème.
Restez à l'écoute
OriginalL'auteur Eric Taix
Bien, vous devriez vérifier la quantité de mémoire disponible et si c'est pas assez, vous devriez vérifier ce qui est de consommer beaucoup de mémoire.
Autre que cela, vous devriez parler à votre client et savoir si ils ont fait les modifications sur le serveur et si oui, ce qu'ils ont fait le changement.
Sans en savoir plus, c'est vraiment difficile à impossible de donner des conseils d'expert sur pourquoi vous ne pouvez pas allouer plus de mémoire.
OriginalL'auteur Thomas
Cela signifie probablement que l'OS ne peut pas allouer suffisamment de mémoire continue. Avez-vous toujours le problème après OS redémarrer? Le système de rapport qu'il a 11 Go de RAM? Les fenêtres de la mise en œuvre du PAE n'est pas le meilleur, donc il pourrait causer des problèmes. Essayez de mettre à jour vers une nouvelle version de JDK, si cela échoue, vous auriez besoin d'une machine 64 bits.
Nos clients nous ont dit qu'il a redémarré le serveur. Donc je suppose qu'il l'a fait ! Mais je ne peux pas vraiment comprendre pourquoi il a travaillé la semaine dernière et du coup il ne peut pas. Aussi, j'ai couru un simple VMWare VM avec seulement 1Go de RAM (Windows XP) et j'ai été capable de l'allocation jusqu'à 1,2 Go (java -Xmx1200m -version") je sais que sans informations sur ce que le client fait sur le serveur, il sera très difficile de résoudre ce problème. Est-il un utilitaire pour voir (dans un graphique par exemple), combien de continue de mémoire disponible sur le système d'exploitation ?
Talx: vous disposez d'-Xms1000m (à partir de la mémoire), parce que la définition que max la valeur ne sera pas réellement allouer beaucoup de mémoire.
OriginalL'auteur Denis Tulskiy