2011-09-20 97 views
1

我使用框架发挥我的应用程序 在我application.conf我已经给的InvocationTargetException发生:空在游戏框架

jvm.memory=-Xmx512M -Xms512M -XX:-UseGCOverheadLimit 

我有这将为每一个客户,每一个客户执行的功能microapp 该函数将返回该客户的记录以及来自DB的该microapp的记录。

如果我为所有客户运行,我会为第16位客户收到InvocationTargetException(对于15位客户,它已成功运行)。

的错误是

12:38:30,153 ERROR ~ 


Execution exception 
InvocationTargetException occured : null 

play.exceptions.JavaExecutionException 
     at play.mvc.ActionInvoker.invoke(ActionInvoker.java:230) 
     at Invocation.HTTP Request(Play!) 
Caused by: java.lang.reflect.InvocationTargetException 
     at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:543) 
     at play.mvc.ActionInvoker.invoke(ActionInvoker.java:499) 
     at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:475) 
     at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:470) 
     at play.mvc.ActionInvoker.invoke(ActionInvoker.java:158) 
     ... 1 more 
Caused by: java.lang.OutOfMemoryError: Java heap space 
     at java.util.Arrays.copyOf(Unknown Source) 
     at java.lang.StringValue.from(Unknown Source) 
     at java.lang.String.<init>(Unknown Source) 
     at com.mysql.jdbc.SingleByteCharsetConverter.toString(SingleByteCharsetConverter.java:327) 
     at com.mysql.jdbc.ResultSetRow.getString(ResultSetRow.java:787) 
     at com.mysql.jdbc.BufferRow.getString(BufferRow.java:539) 
     at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5571) 
     at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448) 
     at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488) 
     at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:61) 
     at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64) 
     at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) 
     at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249) 
     at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:229) 
     at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:330) 
     at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283) 
     at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527) 
     at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455) 
     at org.hibernate.loader.Loader.getRow(Loader.java:1355) 
     at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611) 
     at org.hibernate.loader.Loader.doQuery(Loader.java:829) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 

,我发现有一个与客户的东西错误。所以我只为那个顾客跑。我越来越

Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space 
     at java.util.jar.Manifest.read(Unknown Source) 
     at java.util.jar.Manifest.<init>(Unknown Source) 
     at java.util.jar.JarFile.getManifestFromReference(Unknown Source) 
     at java.util.jar.JarFile.getManifest(Unknown Source) 
     at sun.misc.URLClassPath$JarLoader$2.getManifest(Unknown Source) 
     at java.net.URLClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.access$000(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector.run(ThreadPoolAsynchronousRunner.java:633) 
     at java.util.TimerThread.mainLoop(Unknown Source) 
     at java.util.TimerThread.run(Unknown Source) 
Exception in thread "pool-2-thread-1" java.lang.OutOfMemoryError: Java heap space 


For this microapp(Error occuring) alone i have 421,251 records 

什么可能是错误的根源。请帮帮我。

+0

由于长时间运行的任务,是否发生死锁? – basav

+0

@basav是的,它终于挂断了整个系统。所以我增加了我的jvm配置为jvm.memory = -Xmx1096M -Xms1096M -XX:-UseGCOverheadLimit之后,我重新启动了我的机器。不同的客户(第56位客户)也出现同样的错误 当进程启动时,错误开始时RAM的使用率为647.8MB,使用量为1.7GB,我的RAM容量为2 GB。我有非常大的数据。它终止堆空间异常在终端和它不断执行..... – Arasu

+0

然后,你必须处理块,只产生所需的线程数或使用队列系统 – basav

回答

0

你的问题是一个OutOfMemory错误。它会在以后因为这个原因增加内存而发生。

您没有提供任何代码示例,但我认为您只尝试从一个查询中向客户端加载太多的数据。关于有421k条记录的评论确认了这一点(除非我误解了)。

而不是做一个find()(或选择,或你正在做的cal)检索所有记录,尝试批量检索记录(100,200)并以这种方式处理它们。