首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Executor使用Hazelcast

Executor使用Hazelcast
EN

Stack Overflow用户
提问于 2014-10-20 12:38:07
回答 1查看 625关注 0票数 0

我一直在调试Hazelcast实例中的内存问题。我正在使用Hazelcast来实现我的executor服务。我不需要从executor返回结果,我只是继续通过

代码语言:javascript
复制
executorService.executeOnMember(Runnable, member);

它在一段时间内运行良好,之后内存就满了。

我使用了一个线程转储工具,我可以看到

代码语言:javascript
复制
        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,它与返回对象时使用的内容相同。

EN

回答 1

Stack Overflow用户

发布于 2014-10-20 17:29:20

你不需要在完成后毁掉你的工作。Hazelcast在作业执行时将其从工作队列中移除,而gc负责其余部分。

关于内存已满:你遇到了一个OOME?默认情况下,IExecutorService将继续接受任务,而不会查看有多少内存可用。如果你生产的任务比消耗的任务更快,这可能会导致OOME。

但您可以在ExecutorConfig上设置queueCapacity。一旦达到最大容量,在调用端您将获得一个RejectedExecutionException。你可以用这个来施加一些反压力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26458660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档