This application that I'm working on has a feature to download the reports(XLSX), DynamicReports 4.0 is the API we are using for it. The application crashes with the following error:
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)
when we try to download the reports.
The exact point where it crashes is when it tries to build the report(it has three sheets within it). This happens only with larger volume of data(more than 4MB), for lesser volume it just works fine.
We are using the following server/jvm
Server - Weblogic 10.3.6
JVM- Jrockit 1.6
It's strange that this application works fine in development environment(Windows XP, 64 bit, 3GB Ram) with the default memory args(even for a report with ^MB of data) where as it crashes in the server, which is windows 2008 R2 with 4GB Ram. JVM being used is the same as development env. We tried tuning the memory by setting the following args:
-XXtlaSize:min=16k,preferred=32k -XXlargeObjectLimit:32k
-XX:PermSize=48m
-XX:MaxPermSize=128m
Tried increasing and decreasing the TLA size only to fail.
Why is it working well in development and failing in server? how do I figure out the root cause and solution?
Note: We cannot use profilers on server, however we tried JrockitMission Control that is available with weblogic package and it was of no much help.