<p dir="ltr">Are you using any entrypoint?<br>
Time or length based?<br>
It could be possible you have to retract manually the events.</p>
<div class="gmail_quote">On 24 Oct 2013 08:23, &quot;Elran Dvir&quot; &lt;<a href="mailto:elrand@checkpoint.com">elrand@checkpoint.com</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="color:#1f497d">I am sending this message again because maybe the last wasn’t sent because of the attached snapshots.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="color:#1f497d">I removed them now.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d">Thanks.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal">Hi all,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I am using Drools Fusion. I am getting OutOfMemoryError rather fast. My JVM is running with –Xmx4g flag.<u></u><u></u></p>
<p class="MsoNormal">I have rules defined in another (not Drools) language.<u></u><u></u></p>
<p class="MsoNormal">Every rule is translated programmatically to a drl file. This is because the user can add and remove rules (in the other language) dynamically.<u></u><u></u></p>
<p class="MsoNormal">The default configuration contains 125 rules.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">For example, one rule is supposed to identify a port scan event.<u></u><u></u></p>
<p>The basic fact is connection log. For each combination of src (source IP) and dst (destination IP) , detect a port scan event, if over 60 seconds there were at least 20 connection logs with different service and protocol.<u></u><u></u></p>

<p>The event will stay closed for 10 minute - no event will be sent during this time for this combination of  src and dst. The event the connection logs’ ids (markers).<u></u><u></u></p>
<p class="MsoNormal">(other rules are very similar in structure, but different in logic, of course)
<u></u><u></u></p>
<div style="border:none;border-bottom:solid windowtext 1.0pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">This is its programmatic drl file:<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">package com.checkpoint.correlation.impl.drools.package30;<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">import java.util.Date<u></u><u></u></p>
<p class="MsoNormal">import java.util.HashMap<u></u><u></u></p>
<p class="MsoNormal">import java.util.Set<u></u><u></u></p>
<p class="MsoNormal">import com.checkpoint.correlation.impl.drools.Log<u></u><u></u></p>
<p class="MsoNormal">import com.checkpoint.correlation.impl.drools.CorrelatedEvent<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">global com.checkpoint.correlation.server.EventsHandler externalEventsHandler;<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">import function com.checkpoint.correlation.impl.utils.UserDefinedFunctions.isInDayHourRange<u></u><u></u></p>
<p class="MsoNormal">import function com.checkpoint.correlation.impl.utils.UserDefinedFunctions.isInIpRange<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">function boolean filter(Log log) { <u></u><u></u></p>
<p class="MsoNormal">                return  (!((log.fieldsMap.get(&quot;src&quot;)!= null &amp;&amp; isInIpRange(log.fieldsMap.get(&quot;src&quot;).toString(), &quot;10.80.0.0&quot;, &quot;10.80.255.255&quot;)) || (log.fieldsMap.get(&quot;src&quot;)!= null &amp;&amp; isInIpRange(log.fieldsMap.get(&quot;src&quot;).toString(), &quot;124.0.0.0&quot;,
 &quot;124.255.255.255&quot;)) || (log.fieldsMap.get(&quot;src&quot;)!= null &amp;&amp; isInIpRange(log.fieldsMap.get(&quot;src&quot;).toString(), &quot;192.168.0.0&quot;, &quot;192.168.255.255&quot;)) || (log.fieldsMap.get(&quot;src&quot;)!= null &amp;&amp; isInIpRange(log.fieldsMap.get(&quot;src&quot;).toString(), &quot;195.158.7.0&quot;, &quot;195.158.7.255&quot;))
 || (log.fieldsMap.get(&quot;src&quot;)!= null &amp;&amp; isInIpRange(log.fieldsMap.get(&quot;src&quot;).toString(), &quot;11.25.0.0&quot;, &quot;11.25.255.255&quot;)) || (log.fieldsMap.get(&quot;src&quot;)!= null &amp;&amp; isInIpRange(log.fieldsMap.get(&quot;src&quot;).toString(), &quot;128.157.0.0&quot;, &quot;128.157.255.255&quot;)) || (log.fieldsMap.get(&quot;src&quot;)!=
 null &amp;&amp; isInIpRange(log.fieldsMap.get(&quot;src&quot;).toString(), &quot;213.114.0.0&quot;, &quot;213.114.255.255&quot;))));<u></u><u></u></p>
<p class="MsoNormal">}<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">function String markersToString(Set markersSet) { <u></u><u></u></p>
<p class="MsoNormal">                int i = 0;<u></u><u></u></p>
<p class="MsoNormal">                String markersString = &quot;&quot;;<u></u><u></u></p>
<p class="MsoNormal">                for (Object marker : markersSet) { <u></u><u></u></p>
<p class="MsoNormal">                                if (i == 25) break;<u></u><u></u></p>
<p class="MsoNormal">                                String markerStr = marker.toString();<u></u><u></u></p>
<p class="MsoNormal">                                if (i &gt; 0) markersString += &quot;\n&quot;;<u></u><u></u></p>
<p class="MsoNormal">                                markersString += markerStr;<u></u><u></u></p>
<p class="MsoNormal">                }<u></u><u></u></p>
<p class="MsoNormal">                return markersString;<u></u><u></u></p>
<p class="MsoNormal">}<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">function String calcSeverity(Log log) { <u></u><u></u></p>
<p class="MsoNormal">                return &quot;High&quot;;<u></u><u></u></p>
<p class="MsoNormal">}<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">function String getUniqueId(Log log) { <u></u><u></u></p>
<p class="MsoNormal">                String uniqueId=&quot;&quot;;<u></u><u></u></p>
<p class="MsoNormal">                uniqueId += (log.fieldsMap.get(&quot;service&quot;) != null ? log.fieldsMap.get(&quot;service&quot;).toString() : &quot;null&quot;);<u></u><u></u></p>
<p class="MsoNormal">                uniqueId += (log.fieldsMap.get(&quot;proto&quot;) != null ? log.fieldsMap.get(&quot;proto&quot;).toString() : &quot;null&quot;);<u></u><u></u></p>
<p class="MsoNormal">                return uniqueId;<u></u><u></u></p>
<p class="MsoNormal">}<u></u><u></u></p>
<p class="MsoNormal">                                                                                                                                                                         
<u></u><u></u></p>
<p class="MsoNormal">declare Log<u></u><u></u></p>
<p class="MsoNormal">                @role(event)<u></u><u></u></p>
<p class="MsoNormal">end<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">declare CorrelatedEvent<u></u><u></u></p>
<p class="MsoNormal">                @role(event)<u></u><u></u></p>
<p class="MsoNormal">                @expires(600s)<u></u><u></u></p>
<p class="MsoNormal">end<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">rule &quot;Port scan from external network&quot;<u></u><u></u></p>
<p class="MsoNormal">enabled true<u></u><u></u></p>
<p class="MsoNormal">dialect &quot;java&quot;<u></u><u></u></p>
<p class="MsoNormal">no-loop<u></u><u></u></p>
<p class="MsoNormal">when<u></u><u></u></p>
<p class="MsoNormal">                $log : Log(eval(filter($log)))<u></u><u></u></p>
<p class="MsoNormal">                not CorrelatedEvent(getId() == &quot;{8AC52BA8-1EE8-4f18-9BB4-54492116501C}&quot;, groupByFieldsMap.get(&quot;src&quot;) == $log.fieldsMap.get(&quot;src&quot;), groupByFieldsMap.get(&quot;dst&quot;) == $log.fieldsMap.get(&quot;dst&quot;))<u></u><u></u></p>

<p class="MsoNormal">                accumulate($accumulatedLog : Log(eval(filter($accumulatedLog)), this after[0s,60s] $log, fieldsMap.get(&quot;src&quot;) == $log.fieldsMap.get(&quot;src&quot;), fieldsMap.get(&quot;dst&quot;) == $log.fieldsMap.get(&quot;dst&quot;), $id : getUniqueId(this));<u></u><u></u></p>

<p class="MsoNormal">                                $idSet : collectSet($id);<u></u><u></u></p>
<p class="MsoNormal">                                $idSet.size &gt; 19)<u></u><u></u></p>
<p class="MsoNormal">                accumulate($accumulatedLog : Log(eval(filter($accumulatedLog)), this after[0s,60s] $log, fieldsMap.get(&quot;src&quot;) == $log.fieldsMap.get(&quot;src&quot;), fieldsMap.get(&quot;dst&quot;) == $log.fieldsMap.get(&quot;dst&quot;), $idSet.contains(getUniqueId(this)),
 $marker : fieldsMap.get(&quot;marker&quot;));<u></u><u></u></p>
<p class="MsoNormal">                                $markerSet : collectSet($marker))<u></u><u></u></p>
<p class="MsoNormal">                then<u></u><u></u></p>
<p class="MsoNormal">                CorrelatedEvent $ce = new CorrelatedEvent(&quot;{8AC52BA8-1EE8-4f18-9BB4-54492116501C}&quot;);<u></u><u></u></p>
<p class="MsoNormal">                $ce.groupByFieldsMap.put(&quot;src&quot;, $log.fieldsMap.get(&quot;src&quot;));<u></u><u></u></p>
<p class="MsoNormal">                $ce.groupByFieldsMap.put(&quot;dst&quot;, $log.fieldsMap.get(&quot;dst&quot;));<u></u><u></u></p>
<p class="MsoNormal">                insert($ce);<u></u><u></u></p>
<p class="MsoNormal">                HashMap&lt;String,Object&gt; fieldsMap = new HashMap&lt;String,Object&gt;();<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;cu_rule_id&quot;, &quot;{8AC52BA8-1EE8-4f18-9BB4-54492116501C}&quot;);<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;event_name&quot;, &quot;Port scan from external network&quot;);<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;cu_rule_severity&quot;, calcSeverity($log));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;cu_rule_category&quot;, &quot;Scans&quot;);<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;cu_log_count&quot;, $markerSet.size());<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;time&quot;, new Date());<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;cu_markers_list&quot;, markersToString($markerSet));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;src&quot;, $log.fieldsMap.get(&quot;src&quot;));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;src_machine_name&quot;, $log.fieldsMap.get(&quot;src_machine_name&quot;));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;src_user_name&quot;, $log.fieldsMap.get(&quot;src_user_name&quot;));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;dst&quot;, $log.fieldsMap.get(&quot;dst&quot;));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;dst_machine_name&quot;, $log.fieldsMap.get(&quot;dst_machine_name&quot;));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;dst_user_name&quot;, $log.fieldsMap.get(&quot;dst_user_name&quot;));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;service&quot;, $log.fieldsMap.get(&quot;service&quot;));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;proto&quot;, $log.fieldsMap.get(&quot;proto&quot;));<u></u><u></u></p>
<p class="MsoNormal">                fieldsMap.put(&quot;product&quot;, $log.fieldsMap.get(&quot;product&quot;));<u></u><u></u></p>
<p class="MsoNormal">                externalEventsHandler.handleEvent(fieldsMap);<u></u><u></u></p>
<div style="border:none;border-bottom:solid windowtext 1.0pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal">end  <u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I am sending logs in a rate of up to 200 logs/sec. After about 3 minutes, my application starts to be unresponsive.
<u></u><u></u></p>
<p class="MsoNormal">I monitored the JVM with VisualVM. Two snapshots of VisualVM are attached.<u></u><u></u></p>
<p class="MsoNormal">I found out that the class consuming most memory is FromNodeLeftTuple of drools (as can be seen in “instances.png”).<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p><u></u><span>1)<span style="font:7.0pt &quot;Times New Roman&quot;">     
</span></span><u></u><span dir="LTR"></span>Is my inserting rate is too high?<u></u><u></u></p>
<p><u></u><span>2)<span style="font:7.0pt &quot;Times New Roman&quot;">     
</span></span><u></u><span dir="LTR"></span>Is There a way I can make my rules more memory efficient?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border:none;border-bottom:solid windowtext 1.0pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal">Inserting logs:<u></u><u></u></p>
</div>
<p class="MsoNormal">public void insertEvents(Collection&lt;Map&lt;String, Object&gt;&gt; logs)<u></u><u></u></p>
<p class="MsoNormal">{<u></u><u></u></p>
<p class="MsoNormal">                for (Map&lt;String, Object&gt; map : logs) {<u></u><u></u></p>
<p class="MsoNormal">                                Log log = new Log();<u></u><u></u></p>
<p class="MsoNormal">                                Log.fieldsMap.putAll(map);<u></u><u></u></p>
<p class="MsoNormal">                                session.insert(log);<u></u><u></u></p>
<p class="MsoNormal">                                session.fireAllRules();<u></u><u></u></p>
<p class="MsoNormal">                }<u></u><u></u></p>
<div style="border:none;border-bottom:solid windowtext 1.0pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal">}<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border:none;border-bottom:solid windowtext 1.0pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal">Log class:<u></u><u></u></p>
</div>
<p class="MsoNormal">public class Log<u></u><u></u></p>
<p class="MsoNormal">{<u></u><u></u></p>
<p class="MsoNormal">    public HashMap&lt;String, Object&gt; fieldsMap = new HashMap&lt;&gt;();<u></u><u></u></p>
<p class="MsoNormal">}<u></u><u></u></p>
<div style="border-top:solid windowtext 1.0pt;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:none;padding:1.0pt 0in 1.0pt 0in">
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">CorrelatedEvent class:<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">public class CorrelatedEvent<u></u><u></u></p>
<p class="MsoNormal">{<u></u><u></u></p>
<p class="MsoNormal">    public Map&lt;String, Object&gt; groupByFieldsMap;<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">    private String id;<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">    public CorrelatedEvent(String id)<u></u><u></u></p>
<p class="MsoNormal">    {<u></u><u></u></p>
<p class="MsoNormal">        groupByFieldsMap = new HashMap&lt;&gt;();<u></u><u></u></p>
<p class="MsoNormal">        <a href="http://this.id" target="_blank">this.id</a> = id;<u></u><u></u></p>
<p class="MsoNormal">    }<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">    public String getId()<u></u><u></u></p>
<p class="MsoNormal">    {<u></u><u></u></p>
<p class="MsoNormal">        return id;<u></u><u></u></p>
<p class="MsoNormal">    }<u></u><u></u></p>
<div style="border:none;border-bottom:solid windowtext 1.0pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal">}<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br></blockquote></div>