[jboss-jira] [JBoss JIRA] (DROOLS-1028) Drools 6.3.0.Final - high memory usage

Bill Tuminaro (JIRA) issues at jboss.org
Sat Jan 16 14:13:00 EST 2016


    [ https://issues.jboss.org/browse/DROOLS-1028?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13149685#comment-13149685 ] 

Bill Tuminaro commented on DROOLS-1028:
---------------------------------------

I understand,  I was hoping that you could give me some idea how to find all these right tuples, so I can use the data in the objects to identify which rule patterns are causing the issue.  In the mean time, I'll work up a sample set of rules for you to examine.

> Drools 6.3.0.Final - high memory usage
> --------------------------------------
>
>                 Key: DROOLS-1028
>                 URL: https://issues.jboss.org/browse/DROOLS-1028
>             Project: Drools
>          Issue Type: Bug
>          Components: core engine
>    Affects Versions: 6.1.0.Final, 6.3.0.Final
>         Environment: Drools 6.3.0.Final on Windows, AIX and Linux
>            Reporter: Bill Tuminaro
>            Assignee: Mario Fusco
>         Attachments: screenshot-1.png
>
>
> We have an application that completely wraps the drools run-time. The code creates rules, compiles them and manages the run-time.  We are experiencing very high memory utilization in an environment with about 1000 rules.  Memory continuously grows as we insert facts, I know this is expected, however the amount of growth seems unusually large.  In one scenario, memory consumption jumps 200 MB after inserting about 4800 facts (each fact consumes about 200 bytes) and calling fireallrules.  We are currently running with the phreak algorithm.  I wrote some code that iterates over the facthandles to count the number of right tuple references once the insertion and fireallrules has completed. It shows over 10 million references.  Can someone review the attached code to tell me if the approach is sound?  Also, how do I identify the entire set of right tuples in memory, I would like to write some code to produce some data about them to give me some insight into what is causing so many right tuples  and right tuple references to be created.  If we can narrow this down, I would like to write a reproducer to isolate the large memory usage.
> for (Object obj : kSession.getObjects()) {
> 	if (obj == null) {
> 		RuleLogger.traceDebug( className, methodName,"Null object");
> 	} 
> 	DefaultFactHandle factHandle = (DefaultFactHandle)kSession.getFactHandle(obj);
> 	if (factHandle != null) {
> 		RightTuple previous = factHandle.getLastRightTuple();
> 		int rtCount = 0;
> 		if (previous != null ) {
> 			++rtCount;
> 			while (true) {
> 				previous = (RightTuple) previous.getNext();
> 				if (previous == null)
> 					break;
> 				++rtCount;
> 			}
> 		}
> 	totalRighttuples += rtCount;
> 	}
> }
> ...
> String msg = "printStats() - WM has " +nm.length() + " nodes in NM array, " + activeNodesInNm + " active nodes, " + totalsmNetworkNodes+  " network nodes, " + totalsmPathMemories + " path memories, " +
> 				+ totalRighttuples + " rightTuple references";
> Sample output:
> printStats() - WM has 14328 nodes in NM array, 4711 active nodes, 26396 network nodes, 4640 path memories, 10754655 rightTuple references



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)



More information about the jboss-jira mailing list