Произошло InvocationTargetException: пусто в платформе Play - PullRequest
1 голос
/ 20 сентября 2011

Я использую игровую инфраструктуру для своего приложения. В моем application.conf я дал

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

У меня есть функция, которая будет выполняться для каждого клиента и для каждого микро приложения. Эта функция будет возвращать записи.для этого клиента и для этого microapp из БД.

если я запускаю для всех клиентов, я получаю InvocationTargetException для 16-го клиента. (Для 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

Что может быть источником ошибки.Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 22 сентября 2011

Ваша проблема - ошибка OutOfMemory. Это происходит позже, когда вы увеличиваете баран по этой причине.

Вы не предоставили ни одного примера кода, но я предполагаю, что вы пытаетесь загрузить в память слишком много данных от ваших клиентов только одним запросом. Этот комментарий о наличии 421 тыс. Записей подтверждает это (если я не понял).

Вместо того, чтобы выполнять поиск () (или выберите, или калибровку, которую вы делаете), чтобы извлечь все записи, попробуйте извлечь записи в пакетном режиме (100, 200) и обработать их таким образом.

...