2016-03-31 1 views
2

J'ai environ 8 API JAR et 4 du cloud de printemps (Zuul, Hystrix, Config-Server, Eureka). Je cours tous les pots dans un serveur en ce moment même si nous augmenterons plus tard quand aller à la production.Problème de mémoire lors de l'exécution du fichier JAR

Le serveur AWS Linux dispose d'une mémoire de 16 Go. Le problème que j'ai est le serveur manque constamment de mémoire pour une raison quelconque et quand j'essaye d'exécuter un Jar je reçois l'erreur ci-dessous.

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000078fb80000, 293601280, 0) failed; error='Cannot allocate memory' (errno=12) 

L'erreur n'est pas spécifique au pot spécifique, elle est aléatoire.

mémoire du serveur (Actuellement, j'ai 9 pots déployés): -

free -m 

      total  used  free  shared buff/cache available 
Mem:   15630  13684  1835   17   110  1781 

Quelqu'un at-il fait face à un problème similaire. Peut fournir plus d'informations si d'autres informations sont requises.

Toute aide sera appréciée.

+0

Vous pouvez essayer de faire un enregistrement de vol, java -XX: StartFlightRecording = paramètres = profil, nomfichier = enregistrement.jfr, dumponexit = true (JDK8u40) et ouvert dans Java Mission Control. JFR peut rencontrer des problèmes sur OOM, mais plusieurs fois cela va réussir. Regardez les statistiques des objets pour voir quel genre d'objets remplit le tas, ou Statistiques d'allocation (s'il y a des objets très volumineux) ou des informations sur la mémoire native, la collecte des ordures, etc peut donner un indice, –

Répondre

1

J'ai ajouté les arguments java aux travaux d'exécution qui semblent résoudre le problème.

java -Xmx64m -Xss256k jar abc.jar

Après cela, même si j'avais 13 pots déployés sur le même serveur que j'avais une valeur de 10 Go de mémoire à gauche et qui était 1.7GB avant ajouté les arguments .

mémoire Avant arguments JAVA:

free -m 

       total  used  free  shared buff/cache available 

Mem:   15630  13684  1835   17   110  1781 

mémoire Après Java Arguments:


free -m 

       total  used  free  shared buff/cache available 

Mem:   15630  4927  8769   25  1932  10373 
2

Cela se produit généralement lorsque la machine virtuelle Java tente d'utiliser plus de mémoire et est disponible et que le système d'exploitation refuse après le démarrage du programme. Je voudrais essayer de réduire la taille du tas pour donner au système plus de mémoire libre.

Vous n'avez pratiquement pas de tampon/cache utilisé, ce qui me laisse penser qu'il y a des moments où votre mémoire libre est inférieure à cette taille. (Juste pas quand vous avez pris cet échantillon)

Combien d'espace d'échange libre cette machine a-t-elle?

+0

Je ne suis pas un serveur je vérifie l'espace de swap ... Je viens de modifier la commande d'exécution pour tester dans le serveur -> ** java -Xmx64m -Xss256k -jar jarname.jar ** permet de voir comment cela se passe. –

+0

@Grinish Le problème est combien de mémoire libre le système a. Un petit programme peut échouer s'il n'y a pas beaucoup de mémoire libre (même momentanément) –

+0

Je suis d'accord ..Le problème est fondamentalement il n'est pas supposé utiliser autant mais il utilise encore beaucoup de mémoire ... basé sur cet article https://spring.io/blog/2015/12/10/spring-boot-memory- performance Je devrais avoir beaucoup d'espace dans ma machine ... –