java.lang.OutOfMemoryError: Java heap space
tout en utilisant Jruby, j'obtiens ce message.
Complete Java stackTrace
java.lang.OutOfMemoryError: Java heap space
comment le résoudre ?
Vous voulez probablement à attribuer moins d'objets sur le tas. Pouvez-vous poster un extrait de code pour que nous puissions comprendre ce que le code que vous essayez de les exécuter?
double possible de la Façon de traiter avec "java.lang.OutOfMemoryError: Java heap space" (erreur de taille du segment de mémoire de 64 mo)
double possible de la Façon de traiter avec "java.lang.OutOfMemoryError: Java heap space" (erreur de taille du segment de mémoire de 64 mo)
OriginalL'auteur | 2009-10-06
Vous devez vous connecter pour publier un commentaire.
TLDR:
jruby -J-Xmx1024m script_you_want_to_run.rb
Comme d'autres l'ont mentionné, votre programme tente d'allouer plus de mémoire que la taille max de la JVM est autorisé à allouer.
Aussi comme d'autres l'ont mentionné, vous pouvez configurer Java pour permettre plus de l'allocation de mémoire en racontant via la ligne de commande avec l'argument -Xmx1024m (par exemple).
-Xmx est l'argument de mémoire max, et la 1024m serait la taille de la mémoire de la dernière m pour méga-octets). Je pense que JRuby commence la JVM avec max memory 512m déjà, de sorte que vous aurez probablement envie d'aller plus haut que cela.
Pour envoyer des arguments à la JVM de la ligne de commande à l'aide de jruby, vous aurez besoin d'ajouter -J en face de l'argument, de sorte que votre ligne de commande ressemble à ceci:
Je suis également d'accord avec la fuite de mémoire sentiments: Si vous n'êtes pas vraiment affaire avec une tonne d'objets avec l'espoir que vous pourriez voir cette erreur, alors vous voudrez peut-être examiner la possibilité que votre programme est d'avoir des effets secondaires indésirables.
OriginalL'auteur Sammy Larbi
Vous pouvez ajuster la taille de segment JVM à l'aide de la
-Xmx
et-Xms
options JVM:-Xmx
pour la taille maximale du tas, et-Xms
initiale de la taille du segment. E. g.:J'ai l'habitude d'utiliser les mêmes paramètres pour le rapport initial et le max de la taille du segment.
Dans votre cas, il est vraiment difficile de dire comment taille la JVM sans plus d'informations sur ce que vous faites, lorsque le problème se produit... Ou peut-être vous avez une fuite de mémoire quelque part et l'augmentation de la taille du tas ne va pas aider, il suffit de rendre le problème plus tard. Dans ce cas, la seule solution est de réparer la fuite.
Dernier être pas moins, de toujours garder à l'esprit que plus le tas, le plus les grands GC.
OriginalL'auteur Pascal Thivent
Réglage
JRUBY_OPTS
est la solution qui fonctionne le mieux pour moi. Il a été mentionné dans Koray de réponse.OriginalL'auteur M. Scott Ford
vérifier la version de la JVM de l'jruby avec cette commande
Si elle renvoie cette chaîne, cela signifie que vous utilisez une JVM 32 bits, par conséquent, vous ne pouvez pas définir de max la taille du segment >=2 go
Vous devez définir votre JAVA_HOME pour votre version 64 bits de Java. par exemple,
Vous permettra de voir la suite de la sortie si vous frottez jruby -v commande de nouveau
Vous pouvez voir que vous êtes maintenant à l'aide de la version 64 bits de la JVM. Après cela, vous pouvez définir jruby opte paramètre d'environnement comme suit
ou vous pouvez exécuter votre programme de la façon suivante
-S
drapeau, e.gjruby -J-Xmx2g -S rails s puma
OriginalL'auteur Koray Güclü
L'augmentation de la heap dump taille peut être uniquement un band-aid. Vous avez besoin de générer un dump du tas en ajoutant le bon argument correct:
Cela va générer un fichier similaires à java_*.hprof. Vous pouvez ensuite utiliser une foule d'outils open source pour analyser le tas de vidage. La version 1.6 de Java est livré avec JHat, qui est une sorte de buggy et de ne pas analyser de grands tas. J'utilise ce super plugin Eclipse: Eclipse De La Mémoire De L'Analyseur.
Une fois qu'un rapport est généré à partir de la heap dump, vous pouvez voir les classes prennent le plus de mémoire et vous pouvez l'utiliser comme un point de départ pour le débogage de votre code pour trouver toutes les fuites de mémoire.
OriginalL'auteur Droo
vous pouvez configurer votre max de tas pour une plus grande taille sur la ligne de commande:
OriginalL'auteur akf
Soit vous avez une fuite de mémoire et vous avez besoin de trouver pourquoi vous avez besoin de donner de Java plus d'espace de tas:
OriginalL'auteur cletus
Le message "Java heap space" indique que de nouveaux objets n'ont pas pu être allouées dans le Tas Java. L'erreur n'implique pas nécessairement l'application de fuite de mémoire. Le problème peut être aussi simple que d'un problème de configuration, où le tas de la taille (ou la taille par défaut, si non spécifié) est insuffisante pour l'application.
Sources potentielles de cette Erreur et solutions: http://www.blogsoncloud.com/jsp/techSols/java-lang-OutOfMemoryError-Java-heap-space.jsp
OriginalL'auteur user479283
Je rencontre un problème similaire et je ne peux pas trouver une solution satisfaisante après googler pour quelques heures. Si vous avez besoin de définir la Xms et Xmx params, voici ce qui fonctionne pour moi:
ps aux | grep java
Savoir ce qui est effectivement en cours d'exécution par jruby. Le tuer (kill -9 process_id). Exécutez de nouveau la commande avec le Java natif options sur la ligne de commande.
Espère que cela aide.
Par ailleurs, je suis en utilisant puma serveur avec Jruby on Rails 4.0, et si quelqu'un connaît une solution plus élégante, s'il vous plaît laissez-moi savoir. J'ai tout essayé (after_use_hook, .rvmrc, .bashrc, etc. etc.)
Grâce.
OriginalL'auteur johannzhaojohann