2010-01-14 16 views
0

J'ai un problème sur mes serveurs Solaris. Lorsque je lance un processus Sun Java avec une mémoire restreinte, il faut plus de deux fois plus de ressources.Pourquoi Sun Java sur Solaris prend plus de deux fois la mémoire RSS?

Par exemple, j'ai 64 Go de mémoire sur mes serveurs. 1 est sur Linux, les autres sur Solaris. J'ai couru les mêmes logiciels sur tous les serveurs (seulement Java).

Lorsque les serveurs commencent, ils ont pris entre 400 Mo et 1,2Gb de RAM. Je lance mon processus Java (généralement entre 4 et 16go par processus Java) et je ne peux pas exécuter plus de 32 Go définis avec les valeurs Xmx et Xmx. Je suis ce genre d'erreurs:

> /java -d64 -Xms8G -Xmx8G -version 
Error occurred during initialization of VM 
Could not reserve enough space for object heap 

Comme on peut le voir ici, je suis beaucoup de mémoire réservée et elle est faite par le processus java:

> swap -s 
total: 22303112k bytes allocated + 33845592k reserved = 56148704k used, 704828k available 

Dès que je les tue 1 par 1 , Je récupère mon espace réservé et pourrais en lancer d'autres. Mais en fait je ne peux pas utiliser plus de la moitié de ma mémoire.

Quelqu'un sait comment résoudre ce problème?

Merci

+0

parfois c'est à cause d'un code mal écrit. – ghostdog74

Répondre

1

je crois que la question est Linux sur l'allocation de mémoire engageant tandis que Solaris est assurez-vous que vous allouez en forme dans la mémoire virtuelle. Si vous pensez que c'est un avantage Linux, vous pouvez le reconsidérer quand Linux OOM tueur tuer aléatoirement votre application critique de mission à son pire stade.

Pour résoudre ce problème, il suffit d'ajouter plus d'espace de swap à Solaris.

+0

Merci pour votre réponse, mais pas de chance en ajoutant plus d'espace de swap, c'est la même chose. Pas d'autres idées? – Deimosfr

+0

Veuillez fournir plus de détails. Si le système d'exploitation ne peut pas allouer de mémoire, l'explication est un espace de permutation trop faible. Combien d'espace de swap avez-vous ajouté? Est-ce qu'il est apparu dans la sortie "swap -s" et "swap -a"? – jlliagre

+1

Si vous préférez ne jamais surcharger la mémoire de Linux, faites simplement "echo 2>/proc/sys/vm/overcommit_memory; echo 50>/proc/sys/vm/overcommit_ratio" en tant que root. Le 50 dans la commande ci-dessus est le pourcentage de mémoire physique disponible pour les programmes en mode utilisateur après que le swap est plein. Source: http://www.win.tue.nl/~aeb/linux/lk/lk-9.html Vous pouvez essayer de courir sans sur-engagement et cela fonctionnera. Vous trouverez probablement que vous pouvez faire moins avec le système parce que de nombreux programmes sont mal écrits et n'ont pas vraiment besoin de la mémoire qu'ils réservent. OOM Killer ne frappera jamais, cependant. –