使用hazelcast 3.8中的ScheduledExecutorService,我遇到了内存不足异常。问题是我正在做一项服务,它应该提醒用户一天中的一些事件。任务的执行应该是容错的。用户设置新的提醒,这是ScheduledExecutorService的一项任务,因此每天的任务量可以达到数千。每个任务都使用schedule(可运行命令、长延迟、时间单位)作为一次性操作添加到scheduler中。延迟时间不能超过24小时。当我开始进行测试并在循环中添加任务时,我遇到了一个oom异常。我以为执行后的任务会从内存中删除,但可能我错了。
你能回答几个问题吗?
我们正在使用schedule executor服务在一定延迟后运行可运行的任务,但看起来任务在执行后并没有从内存中删除。我们通过遍历executorService进行验证。getAllScheduledFutures()并检查大小。
HazelcastInstance instance = Hazelcast.newHazelcastInstance();
IScheduledExecutorService scheduler = instance.getScheduledExecutorService("scheduler");
IScheduledFuture future = scheduler.schedule(named("MyTask",
new EchoTask("foobar")), 1, TimeUnit.SECONDS);
Object result = future.get();
System.out.println(future.getHandler().getTaskName() + " result: " + result);
future.dispose();
System.out.println("Press any key to exit");
System.in.read();
Hazelcast.shutdownAll();