내 응용 프로그램 위한 플레이 프레임 워크를 사용하고 내 application.conf에서 나는 모든 고객과 고객 각각에 대해 실행하는 기능을 가지고 있는 InvocationTargetException가 발생했습니다 : 널 (null) 플레이 프레임 워크에
jvm.memory=-Xmx512M -Xms512M -XX:-UseGCOverheadLimit
을 준 microapp 이 함수는 해당 고객 및 DB에서 해당 마이크로 응용 프로그램에 대한 레코드를 리턴합니다.
모든 고객에 대해 실행하면 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
오류의 원인이 될 수있는 것은 무엇입니까? 도와주세요.
장기 실행 작업으로 인해 교착 상태가 발생합니까? – basav
@basav 네, 마침내 전체 시스템을 끊습니다. 그래서 jvm.memory = -Xmx1096M -Xms1096M -XX로 jvm config를 늘 렸습니다 : -UseGCOverheadLimit 그 후에는 내 컴퓨터를 다시 시작했습니다. 다른 고객 (56 번째 고객)에게 다시 동일한 오류가 발생했습니다. 프로세스가 시작되는 동안 오류 발생시 ram 사용량은 647.8MB 였고 사용량은 1.7GB 였으므로 램 용량은 2GB입니다. 나는 정말 거대한 데이터를 가지고있다. 터미널에서 힙 공간 예외를 끝내고 연속적으로 실행합니다 ..... – Arasu
그런 다음 청크로 처리하고 필요한 수의 스레드 만 생성하거나 대기열 시스템을 사용해야합니다. – basav