EDIT: - Comment supprimer ce problème,
Mon projet est en phase de test. quotidiennement après 5-6 heures, il s'arrête soudainement et donnant l'erreur ci-dessous.
Que faire pour supprimer cette erreur? Play ~ Exécuter code> Pour exécuter mon projet
Je développe ce projet dans Scala 2.1 avec Playframework 2.2 P> java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
Caused by: java.lang.OutOfMemoryError: PermGen space
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:396)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395)
at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:113)
at sun.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:331)
at java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1376)
at java.io.ObjectStreamClass.access$1500(ObjectStreamClass.java:72)
at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:493)
at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468)
at java.security.AccessController.doPrivileged(Native Method)
at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:468)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365)
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:602)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1706)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1344)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
[error] Total time: 11065 s, completed 8 Feb, 2014 6:12:52 PM
1. Waiting for source changes... (press enter to interrupt)
java.lang.OutOfMemoryError: PermGen space
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) java.lang.reflect.InvocationTargetException
[error] Total time: 4 s, completed 8 Feb, 2014 6:12:57 PM
2. Waiting for source changes... (press enter to interrupt)
java.lang.OutOfMemoryError: PermGen space
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) java.lang.reflect.InvocationTargetException
[error] Total time: 4 s, completed 8 Feb, 2014 6:13:08 PM
3. Waiting for source changes... (press enter to interrupt)
java.lang.OutOfMemoryError: PermGen space
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) java.lang.reflect.InvocationTargetException
[error] Total time: 6 s, completed 8 Feb, 2014 6:13:54 PM
4. Waiting for source changes... (press enter to interrupt)
[error] Expected letter
[error] Expected symbol
[error] Expected '!'
[error] Expected '+'
[error] Expected '++'
[error] Expected ';'
[error] Expected end of input.
[error] Expected 'show'
[error] Expected '*'
[error] Expected '{'
[error] Expected project ID
[error] Expected configuration
[error] Expected key
[error] 9000
[error] ^
sbt appears to be exiting abnormally.
The log file for this session is at /tmp/sbt7580663022166474466.log
java.lang.OutOfMemoryError: PermGen space
Error during sbt execution: java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-125" java.lang.OutOfMemoryError: PermGen space
5 Réponses :
Commencez par augmenter votre taille Gén Perm lorsque vous démarrez la JVM. P>
Profilez votre code et découvrez pourquoi Gen Perm est consommé. p>
Rechercher des collections qui ne relâchent jamais de références, des tâches profondément récursives, etc. p>
En général, cela signifie que vous n'avez pas donné assez de mémoire à votre JVM ou que vous avez une fuite de mémoire. Voyez comment les gens traitent de tels problèmes ici: Traiter avec "Java.lang.outofMemoryError : Permgen Space "Erreur ou recherche d'une erreur spécifique à la lecture:" Java.lang.outofMemoryError: Permgen ".
En regardant votre journal, j'ai remarqué que vous l'exécutez probablement à partir de SBT ou d'un autre outil de construction comme Maven ("en attente de changements de source ..."). Pour aider SBT à empêcher les fuites de mémoire, vous pouvez ajouter ces arguments lorsque vous le déjeunerez: p> notez la ligne de commande de la classe de déchargement de la classe. En général, j'ai remarqué que les applications exécutées dans SBT parviennent toujours à fuir leurs ressources, peu importe ce que vous faites, mais en production, cela ne se produit pas. Vous pouvez essayer de courir dans un mode JVM Forked pour aider SBT - voir SBT-Revolver Plugin pour Exemple. Si vous souhaitez vraiment savoir comment votre application consomme de la mémoire et si elle a des fuites de mémoire l'exécutant en dehors d'un outil de construction, c'est-à-dire le déployer au conteneur comme Tomcat ou d'exécuter un pot ou de quoi avez-vous. Vous pouvez joindre des outils tels que jconsole code> pour observer l'utilisation de la mémoire. P> p>
Votre code génère de nombreuses classes. Les classes sont stockées dans l'espace Permgen et ne sont jamais recueillies (avant Java 8). Vous pouvez augmenter votre espace Permgen à l'aide de l'option à l'aide de Vous pouvez également utiliser un JVM Java 8 car il n'utilise plus PermanGenmore. P> P> -xxmaxpermsize code> lorsque vous exécutez la JVM, par exemple:
-xmx code> ou < Code> -XMS code> (espace de tas) Ne fonctionne pas car il s'agit d'un espace différent. p>
Les choses que vous dites sur Java 8 sont également vraies pour Java 7
Vous pouvez utiliser jconsole.exe, qui fait partie de JDK, pour voir la tendance, comment la taille de la permène augmente. Peut-être que cela augmente à certains intervalles de temps, il vous sera donc plus facile de déboguer. Essayez également d'augmenter la taille de la Permgen: augmenter l'espace Permgen . Mais si le problème est en code, cela ne vous aidera pas pendant une longue période ... P>
J'ai eu le même problème, donc j'ai exporté le sbt_opts code> comme suit:
Je ne pense plus que cela fonctionne plus. Je reçois un avertissement d'hotspot sur les options permsize code> et
maxpermsize code> ayant été supprimé dans la version 8.0.
Je ne suis pas sûre de ça. Quand j'ai posté cette version 8.0 n'était pas sorti.
Si vous descendez, avez-vous au moins le courage de dire pourquoi est-ce faux!
Je pense que vous devriez mentionner comment vous démarrez votre application: votre environnement (SBT, etc.) et la commande.
Ceci est un problème typique avec la recompilation dans une JVM en cours d'exécution. Vraisemblablement, vous testez et recompilez des cours de manière continue?
Si vous êtes dans la phase de test, vous devez exécuter votre code de la même manière qu'il fonctionnera dans la production, c'est-à-dire de manière non interactive. Vérifiez La documentation de la lecture sur la façon d'exécuter dans
étape code> Mode, voire mieux, exécuté à partir du paquet autonome créé par la commande
dist code>.
Si l'une des réponses fournies résout votre problème, veuillez l'accepter de fermer le problème. Merci !