简体   繁体   English

作为服务运行时,内存的永久性空间不足

[英]Out of memory permgen space when running as service

I have Jboss 7.1.1 AS and when I run it as service, after some time when I use jasper reports I get exception: java.lang.OutOfMemoryError: PermGen space 我有Jboss 7.1.1 AS,当我将其作为服务运行时,使用jasper报告一段时间后,出现异常:java.lang.OutOfMemoryError:PermGen space

Notice that this does not happen at all when I run it from Jboss developer studio. 请注意,当我从Jboss开发人员工作室运行它时,根本不会发生这种情况。

What should I do ? 我该怎么办 ?

Error stack: 错误堆栈:

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]

You can try to raise the PermSize for your JBoss in the standalone.conf.bat that's inside the bin folder of your server. 您可以尝试在服务器的bin文件夹内的standalone.conf.bat中提高JBoss的PermSize

Find set " JAVA_OPTS=-Xms64M -Xmx512M -XX:MaxPermSize=256M " and change the MaxPermSize as per your requirement. 找到集合“ JAVA_OPTS=-Xms64M -Xmx512M -XX:MaxPermSize=256M ”,然后根据需要更改MaxPermSize

I don't know much about developer studio, but it probably sets the PermGem for the server ignoring the standalone.conf.bat (with a higher value), thus your report works. 我对Developer Studio不太了解,但是它可能忽略了standalone.conf.bat(具有更高的值)来为服务器设置PermGem,因此您的报告有效。

BUT, you need to search for any leaks in your report that may be causing that OutOfMemoryError . 但是,您需要在报告中搜索可能导致OutOfMemoryError的任何泄漏。

Hope it helps. 希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM