[jboss-jira] [JBoss JIRA] (DROOLS-915) LeftTuples don't get deleted from segment memories when the segment itself is unlinked
Dmitry Toptygin (JIRA)
issues at jboss.org
Tue May 3 11:48:00 EDT 2016
[ https://issues.jboss.org/browse/DROOLS-915?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13200432#comment-13200432 ]
Dmitry Toptygin commented on DROOLS-915:
----------------------------------------
Maybe this comment will help if anybody experiences this issue in the field.
This defect, while not a true memory leak, has manifested itself for us this way:
In the exaggerated rule example below, if AlarmFacts are rarely created (let's say one per day),
and if ClearEvents come in very frequently (let's say once a second), then
every day kSession would maintain references to unnecessary ClearEvents (up to 86000 of them).
These ClearEvents are expired and not visible to the rules, kSession.getFactHandles() does not return them.
But they are being kept in JVM memory by JoinNodeLeftTuple(s), via EventHactHandle.
In order to release those ClearEvents, an artificial AlarmFact can be inserted
periodically, which is not practical, or the rule can be rewritten - see
"fixed rule example" at the end of the comment.
--- begin bad rule example ---
{code:java}
package rules
import org.example.memoryleak.events.ClearEvent
import org.example.memoryleak.events.AlarmFact
declare org.example.memoryleak.events.ClearEvent
@role( event )
@timestamp( eventTimestamp )
@expires( 5s )
end
rule "Delete alarm on clearEvent"
when
ClearEvent($devId: deviceId)
$alarm: AlarmFact($devId == deviceId)
then
delete($alarm);
end
{code}
--- end bad rule example ---
--- begin fixed rule example ---
{code:java}
...
rule "Delete alarm on clearEvent"
when
$alarm: AlarmFact($devId: deviceId)
ClearEvent(deviceId == $devId)
then
delete($alarm);
end
{code}
--- end fixed rule example ---
> LeftTuples don't get deleted from segment memories when the segment itself is unlinked
> --------------------------------------------------------------------------------------
>
> Key: DROOLS-915
> URL: https://issues.jboss.org/browse/DROOLS-915
> Project: Drools
> Issue Type: Bug
> Reporter: Mario Fusco
> Assignee: Mario Fusco
>
> LeftTuples should be deleted from segment memories when the segment itself is unlinked. At the moment they remain in the segment memory forever until the segment is linked in again. This is not a memory leak because the segment memory cannot grow when the segment itself is unlinked, but just an optimization to free memory as early as possible.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
More information about the jboss-jira
mailing list