[ https://issues.apache.org/jira/browse/IGNITE-10244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16687091#comment-16687091 ]
David Harvey edited comment on IGNITE-10244 at 11/14/18 8:45 PM: ----------------------------------------------------------------- We found IGNITE-9026 (CONTIGUOUS mode) after giving up on SHARED mode: "We had an seemingly functional system in SHARED_MODE, where we have a custom StreamReceiver that sometimes sends closures on the peer class loaded code to other servers. However, we ended up running out of Metaspace, because we had > 6000 class loaders! We suspected a regression in this change [https://github.com/apache/ignite/commit/d2050237ee2b760d1c9cbc906b281790fd0976b4#diff-3fae20691c16a617d0c6158b0f61df3c], so we switched to CONTINUOUS mode. " The above commit bypassed, in SHARED MODE, the code that seemed to prevent the proliferation of class loaders. Can't be a 2.7 gate if it exists in 2.5 was (Author: syssoftsol): We found IGNITE-9026 (CONTIGUOUS mode) after giving up on SHARED mode: "We had an seemingly functional system in SHARED_MODE, where we have a custom StreamReceiver that sometimes sends closures on the peer class loaded code to other servers. However, we ended up running out of Metaspace, because we had > 6000 class loaders! We suspected a regression in this change [https://github.com/apache/ignite/commit/d2050237ee2b760d1c9cbc906b281790fd0976b4#diff-3fae20691c16a617d0c6158b0f61df3c], so we switched to CONTINUOUS mode. " > Peer classloading creates a new class on each call for nested compute tasks > --------------------------------------------------------------------------- > > Key: IGNITE-10244 > URL: https://issues.apache.org/jira/browse/IGNITE-10244 > Project: Ignite > Issue Type: Bug > Affects Versions: 2.7 > Reporter: Mikhail Cherkasov > Priority: Critical > Attachments: JustServer.java, MyCall.java, NestedCall.java, Test.java > > > If a compute task has embedded compute tasks, embeded task will be loaded by > peer class loading as a new class on each call, which leads to metadata OOM. > Reproducer is attached. Make sure that you run ignite nodes with > -XX:MaxMetaspaceSize=64m , by default JVM doesn't limit meta space size. > Also, we need to keep client and server in different JVM to make peer > classloading be engaged. > So what happens: > # client sends compute taks MyCall to server_1 > # server_1 execute MyCall and MyCall sends NestedCall task to server_2 > # server_2 loads NestedCall as a new class and execute it > # repeat it's again and on second iteration server_2 will load NestedCall as > new class again, after few iterations this will lead to OOM -- This message was sent by Atlassian JIRA (v7.6.3#76005)