You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Mikhail Cherkasov (JIRA)" <ji...@apache.org> on 2018/11/14 02:10:00 UTC

[jira] [Updated] (IGNITE-10244) Peer classloading creates a new class on each call for nested compute tasks

     [ https://issues.apache.org/jira/browse/IGNITE-10244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mikhail Cherkasov updated IGNITE-10244:
---------------------------------------
    Description: 
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

  was:
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.

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


> 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)