<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Ack'd and queued. <br>
      <br>
      On 07/22/2014 11:46 PM, Kent Anderson wrote:<br>
    </div>
    <blockquote
      cite="mid:1F438071-3E59-416F-873E-08BAD0D9E016@psware.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      It appears there is another condition where Drools holds onto
      memory indefinitely. (See <a moz-do-not-send="true"
        href="https://issues.jboss.org/browse/DROOLS-516">https://issues.jboss.org/browse/DROOLS-516</a>)
      <div><br>
      </div>
      <div>Use case: We have a set of rules designed to detect a
        heartbeat, then report when/if the heartbeat stops.</div>
      <div><br>
      </div>
      <div>Problem: In the normal case of a constant heartbeat, memory
        is retained in the JVM, even though the fact count in working
        memory is 1.</div>
      <div><br>
      </div>
      <div>The following rules produce this problem. &nbsp;I have attached a
        test project that demonstrates this problem. &nbsp;600K events are
        inserted into the stream, then the test driver waits. &nbsp;After 10
        seconds, the &#8220;absence detected&#8221; rule fires. &nbsp;Requesting a GC via
        JMC has no effect. &nbsp;If you hit a key while the test driver is
        waiting, a new event will be added, which will cause the &#8220;clear
        absence alarm&#8221; rule to fire. &nbsp;At this point some memory is freed
        automatically. &nbsp;Requesting another GC removes all memory and the
        JVM is back in its (nearly) new condition.</div>
      <div><br>
      </div>
      <div>We consider this a memory leak since the events are gone from
        working memory and will no longer be considered in any rule
        evaluations, but they are still active somewhere in the JVM.</div>
      <div><br>
      </div>
      <div><span style="font-family: Monaco; font-size: 11px; color:
          rgb(169, 21, 0);">package</span><span style="font-family:
          Monaco; font-size: 11px;">
          org.drools.example.api.kiemodulemodel</span><span
          style="font-family: Monaco; font-size: 11px;">&nbsp;</span></div>
      <div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            style="color: #a91500">import</span> demo.Event&nbsp;</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">declare<span style="color: #000000">
            Event</span></div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; @role( event )</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; @timestamp( timestamp )</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">end</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            style="color: #a91500">declare</span> Heartbeat</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>@role(
          event )</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>@timestamp(
          event.timestamp )</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>event
          &nbsp; : Event</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">end</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            style="color: #a91500">declare</span> AbsenceDetected</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; name&nbsp; &nbsp; : String</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">end</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">/*</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;* This rule matches the first event</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;*</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;* NOTE: This stream requires the
          heartbeat event</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;* to occur at least once before
          absence will be detected.</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;*/</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(0, 143, 0);"><span style="color: #a91500">rule</span><span
            style="color: #000000"> </span>"detect first heartbeat"</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">when</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>$event
          : Event()</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span><span
            style="color: #a91500">not</span> ( Heartbeat() )</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">then</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>delete($event);</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span><span
            style="color: #a91500">insert</span>(<span style="color:
            #a91500">new</span> Heartbeat($event));</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>System.out.println(<span
            style="color: #008f00">"[DFH] Got event: "</span> +
          $event.getEventId());</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">end</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">/*</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;* This rule matches every event and
          stores only the most recent</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;* as the heartbeat.</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;*/</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(0, 143, 0);"><span style="color: #a91500">rule</span><span
            style="color: #000000"> </span>"keep latest heartbeat"</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">when</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>$heartbeat
          : Heartbeat()</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>$event
          : Event()</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">then</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>delete($heartbeat);</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span><span
            style="color: #a91500">insert</span>(<span style="color:
            #a91500">new</span> Heartbeat($event));</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>System.out.println(<span
            style="color: #008f00">"[KLH] Got event: "</span> +
          $event.getEventId());</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>delete($event);</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">end</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">/*</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;* This rule detects when a
          heartbeat stops for 10s</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;*/</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(0, 143, 0);"><span style="color: #a91500">rule</span><span
            style="color: #000000"> </span>"detect absence"</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);"><span style="color: #000000"><span
              class="Apple-tab-span" style="white-space:pre"> </span></span>duration<span
            style="color: #000000">(10s)</span></div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">when</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>$heartbeat
          : Heartbeat()</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; <span style="color: #a91500">not</span> ( Event() )</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; <span style="color: #a91500">not</span> (AbsenceDetected()
          )</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">then</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; delete($heartbeat);</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; <span style="color: #a91500">insert</span>(<span
            style="color: #a91500">new</span> AbsenceDetected(<span
            style="color: #008f00">"Absence"</span>));</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; System.out.println(<span style="color: #008f00">"[DA]
            Absence detected"</span>);</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">end</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">/*</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;* This rule detects when the
          heartbeat starts again after&nbsp;</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;* absence has been detected.</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(146, 144, 0);">&nbsp;*/</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(0, 143, 0);"><span style="color: #a91500">rule</span><span
            style="color: #000000"> </span>"clear absence alarm"</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">when</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>$heartbeat
          : Heartbeat()</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;">&nbsp;
          &nbsp; $absence : AbsenceDetected ()</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">then</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span
            class="Apple-tab-span" style="white-space:pre"> </span>delete($absence);</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(0, 143, 0);"><span style="color: #000000"><span
              class="Apple-tab-span" style="white-space:pre"> </span>System.out.println(</span>"[CAA]
          Heartbeat restored"<span style="color: #000000">);</span></div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          color: rgb(169, 21, 0);">end</div>
        <div style="margin: 0px; font-size: 11px; font-family: Monaco;
          min-height: 15px;"><br>
        </div>
      </div>
      <div><br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <div><br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
rules-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a></pre>
    </blockquote>
    <br>
  </body>
</html>