2017-02-04 37 views
2

Использование ScheduledExecutorService от hazelcast 3.8 У меня есть исключение из памяти. Дело в том, что я делаю услугу, которая должна напоминать пользователю о каком-то событии в течение дня. Выполнение задачи должно быть отказоустойчивым. Пользователь устанавливает новое напоминание, которое является задачей для ScheduledExecutorService, поэтому количество заданий может составлять несколько тысяч в день. Каждая задача добавляет к планировщику однократное действие с использованием графика (Runnable command, long delay, TimeUnit unit). Задержка не может быть больше 24 часов. Когда я начал делать тесты и добавлял задачи в цикл, у меня есть исключение oom. Я думал, что задача после выполнения будет удалена из памяти, но, вероятно, я ошибся.Hazelcast ScheduledExecutorService

Можете ли вы ответить на несколько вопрос:

  1. Если задача будет удалена из памяти после выполнения?
  2. Есть ли какие-либо настройки для этого?
  3. Могу ли я использовать ScheduledExecutorService для множества задач с одним выстрелом?
  4. Есть еще один способ решить мою задачу с hazelcast немного не используя ScheduledExecutorService

ответ

2
  1. Да
  2. future.dispose();
  3. Да
  4. Да, вы могли бы запустить запланированную службу-исполнитель на определенной частоте, и она может проверить, что предпочтения пользователей, если выполнение службы одинаково для всех итераций.

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

+0

Я думаю, что future.dispose() должен быть вызван в любое время, когда scheduleTask запущен или отменен. У меня была достигнута максимальная емкость при попытке запланировать большую задачу, даже каждая из них выполнена. – bachden

0

Мы используем график обслуживание исполнителя для выполнения Runnable задачи после некоторой задержки, но выглядим как задача не была удалена из памяти после выполнения. Мы проверяем путем итерации через executorService.getAllScheduledFutures() и проверяем размер.

+0

@slippery - удаляется ли после выполнения? – Hiten

 Смежные вопросы

  • Нет связанных вопросов^_^