我正在开发的这个应用程序具有下载报告(XLSX)的功能,DynamicReports 4.0 是我们正在使用的 API。应用程序崩溃并出现以下错误:
weblogic.kernel.Default failed to schedule a request due to
java.lang.OutOfMemoryError: nativeGetNewTLA
at weblogic.work.SelfTuningWorkManagerImpl.getWorkAdapter(SelfTuningWorkManagerImpl.java:252)
at weblogic.work.SelfTuningWorkManagerImpl.schedule(SelfTuningWorkManagerImpl.java:148)
at weblogic.timers.internal.TimerManagerFactoryImpl$WorkManagerExecutor.execute(TimerManagerFactoryImpl.java:133)
at weblogic.timers.internal.TimerManagerImpl.execute(TimerManagerImpl.java:621)
at weblogic.timers.internal.TimerThread$Thread.run(TimerThread.java:277)
当我们尝试下载报告时。
它崩溃的确切点是它尝试构建报告时(其中包含三张工作表)。这只发生在数据量较大(超过 4MB)的情况下,对于较小的数据量,它就可以正常工作。
我们正在使用以下服务器/jvm
Server - Weblogic 10.3.6
JVM- Jrockit 1.6
奇怪的是,这个应用程序在具有默认内存参数的开发环境(Windows XP,64 位,3GB Ram)中运行良好(即使对于具有 ^MB 数据的报告),当它在服务器中崩溃时,它是 windows 2008 R2 4GB 内存。使用的 JVM 与开发环境相同。我们尝试通过设置以下参数来调整内存:
-XXtlaSize:min=16k,preferred=32k -XXlargeObjectLimit:32k
-XX:PermSize=48m
-XX:MaxPermSize=128m
尝试增加和减少 TLA 大小只是失败了。
为什么它在开发中运行良好而在服务器中失败?如何找出根本原因和解决方案?
注意:我们不能在服务器上使用分析器,但是我们尝试了 weblogic 包中提供的 JrockitMission Control,但没有多大帮助。