Недостаточно памяти permgen при работе в качестве службы

У меня есть Jboss 7.1.1 AS, и когда я запускаю его как службу, через некоторое время, когда я использую отчеты jasper, я получаю исключение: java.lang.OutOfMemoryError: PermGen space

Обратите внимание, что этого вообще не происходит, когда я запускаю его из студии разработчиков Jboss.

Что я должен делать ?

Стек ошибок:

at java.lang.Class.getDeclaredConstructors0(Native Method) [rt.jar:1.7.0_79]
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2585) [rt.jar:1.7.0_79]
    at java.lang.Class.getConstructor0(Class.java:2885) [rt.jar:1.7.0_79]
    at java.lang.Class.newInstance(Class.java:350) [rt.jar:1.7.0_79]
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399) [rt.jar:1.7.0_79]
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:396) [rt.jar:1.7.0_79]
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_79]
    at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395) [rt.jar:1.7.0_79]
    at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:113) [rt.jar:1.7.0_79]
    at sun.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:331) [rt.jar:1.7.0_79]
    at java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1376) [rt.jar:1.7.0_79]
    at java.io.ObjectStreamClass.access$1500(ObjectStreamClass.java:72) [rt.jar:1.7.0_79]
    at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:493) [rt.jar:1.7.0_79]
    at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468) [rt.jar:1.7.0_79]
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_79]
    at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:468) [rt.jar:1.7.0_79]
    at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365) [rt.jar:1.7.0_79]
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:602) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) [rt.jar:1.7.0_79]
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) [rt.jar:1.7.0_79]
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:249) [jasperreports-5.6.1.jar:5.6.1]
    at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:233) [jasperreports-5.6.1.jar:5.6.1]
    at net.sf.jasperreports.repo.SerializedObjectPersistenceService.load(SerializedObjectPersistenceService.java:59) [jasperreports-5.6.1.jar:5.6.1]
    at net.sf.jasperreports.repo.SerializedReportPersistenceService.load(SerializedReportPersistenceService.java:43) [jasperreports-5.6.1.jar:5.6.1]
    at net.sf.jasperreports.repo.DefaultRepositoryService.getResource(DefaultRepositoryService.java:155) [jasperreports-5.6.1.jar:5.6.1]

person George-Blackstar7    schedule 09.07.2015    source источник
comment
У нас нет волшебного шара в руке. Дайте нам больше деталей.   -  person Suresh Atta    schedule 09.07.2015
comment
вы должны установить пространство permgen на большее количество;)   -  person Fran Montero    schedule 09.07.2015
comment
Я думал об этом, устанавливая его из standalone.conf.bat, но это не решает проблему. Почему это происходит только при запуске в качестве службы?   -  person George-Blackstar7    schedule 09.07.2015
comment
Увеличьте PermSize. Вы могли заметить, что проблема исчезла с Java 8, у него больше нет Perm Gen (теперь он называется метапространством и является просто частью обычной кучи).   -  person Umberto Raimondi    schedule 10.07.2015


Ответы (1)


Вы можете попытаться увеличить PermSize для вашего JBoss в standalone.conf.bat, который находится внутри папки bin вашего сервера.

Найдите набор "JAVA_OPTS=-Xms64M -Xmx512M -XX:MaxPermSize=256M" и измените MaxPermSize в соответствии с вашими требованиями.

Я мало что знаю о студии разработчиков, но, вероятно, она устанавливает PermGem для сервера, игнорируя standalone.conf.bat (с более высоким значением), поэтому ваш отчет работает.

НО вам необходимо найти в своем отчете любые утечки, которые могут вызывать эту OutOfMemoryError.

Надеюсь, поможет.

person Henrique Fontana    schedule 09.07.2015