Слюни в потоковом режиме : OutOfMemory в karaf

Мой файл ДХО:

package com.sample.eventmanagement;

import com.sample.eventmanagement.CheckInEvent    
import com.sample.eventmanagement.LateCheckInEvent     

global java.util.concurrent.BlockingQueue lateCheckInEntitiesQueue;    
global java.util.concurrent.BlockingQueue clearingLateCheckInEntitiesQueue;    

declare CheckInEvent    
 @role(event)    
 serialNum : String    
 currentCheckInTime : long    
end    

declare LateCheckInEvent    
 @role(event)    
 @expires( 120m )    
 serialNum : String    
 currentCheckInTime : long    
end    

rule "Raising an Late Check-In Alert"    
when     
    $s1: CheckInEvent( $serialNum : serialNum, $currentCheckInTime: currentCheckInTime ) from entry-point apCheckInStream    
    not( CheckInEvent( serialNum == $serialNum, currentCheckInTime > $currentCheckInTime, this after[ 1s, 360s ] $s1 ) from entry-point apCheckInStream)     
then     
    lateCheckInEntitiesQueue.add($s1);    
end    

rule "Clearing Late Check-In Alert"    
when     
    $s1: LateCheckInEvent( $serialNum : serialNum, $currentCheckInTime: currentCheckInTime ) from entry-point lateApCheckInStream    
    CheckInEvent( serialNum == $serialNum, currentCheckInTime > $currentCheckInTime) from entry-point clearingApCheckInStream    
then     
    System.out.println("Clearing late checkin " + $s1);    
    clearingLateCheckInEntitiesQueue.add($s1.getSerialNum());    
end

Я запускаю drools в потоковом режиме в karaf 2.4.3 в linux vm, отчеты о нехватке памяти для 10k объектов checkinvent перекачивают каждые 5 минут.

Мой вариант использования — обнаружение поздней проверки события для объекта, идентифицируемого серийным номером. Обнаружено событие поздней регистрации, перекачивающее это событие в другое правило и ожидающее повторной регистрации от этого объекта в течение 2 часов. Если это происходит, правило 2 срабатывает.

Есть ли проблема в том, как я написал запрос. ?


person Abirami    schedule 19.12.2015    source источник


Ответы (1)


Факты будут оставаться в вашем сеансе (в памяти) до тех пор, пока:

  • вы вручную убираете их: используя delete() или retract()
  • двигатель втягивается как часть своей системы поддержания правды: то есть логически вставленные факты.
  • механизм CEP (слияние) обнаруживает, что из-за ограничений, в которых он задействован, факт, отмеченный @expires, больше не требуется в сеансе.

Ваш сценарий не попадает ни в один из этих трех случаев.

** Кстати, я не видел запроса в вашем файле DRL.

Надеюсь, поможет,

person Esteban Aliverti    schedule 20.12.2015
comment
Добавил @expires для CheckInEvent, теперь нет outOfMemory. Вместо того, чтобы упомянуть это как правило, я опечатался как запрос. - person Abirami; 04.01.2016