Java 使用Hazelcast的执行器
我一直在调试Hazelcast实例中的内存问题。我正在使用Hazelcast实现我的executor服务。我不需要从执行者那里得到结果,我只是继续通过Java 使用Hazelcast的执行器,java,executorservice,hazelcast,Java,Executorservice,Hazelcast,我一直在调试Hazelcast实例中的内存问题。我正在使用Hazelcast实现我的executor服务。我不需要从执行者那里得到结果,我只是继续通过 executorService.executeOnMember(Runnable, member); 它可以正常运行一段时间,然后内存就满了 我工具线程转储,我可以看到这一点 at com.hazelcast.executor.RunnableAdapter.call(RunnableAdapter.java:49) a
executorService.executeOnMember(Runnable, member);
它可以正常运行一段时间,然后内存就满了
我工具线程转储,我可以看到这一点
at com.hazelcast.executor.RunnableAdapter.call(RunnableAdapter.java:49)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at com.hazelcast.executor.DistributedExecutorService$CallableProcessor.run(DistributedExecutorService.java:187)
at com.hazelcast.util.executor.CachedExecutorServiceDelegate$Worker.run(CachedExecutorServiceDelegate.java:186)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76)
at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:92)
我首先想到的是提交的作业在完成后被销毁,或者我需要手动编写代码。这是因为我们正在使用FutureTask,它与返回对象时使用的内容相同 完成后,您不需要破坏您的工作。Hazelcast在执行作业时将其从工作队列中移除,其余的由gc处理 关于内存已满:你遇到了OOME?默认情况下,IExecutorService将继续接受任务,而不查看可用内存量。如果你生产任务的速度比消耗任务的速度快,这会导致OOME 但是您可以在ExecutorConfig上设置queueCapacity。一旦达到最大容量,在调用端您将得到一个RejectedExecutionException。你可以用它来施加一些反压力