Eymeric,
I think what you have there is a combinatorial explosion. I.e. 5 patterns, all of the same type, doing an almost full cross product (limited only by the type attribute constraint). If you check the agenda I would expect to see a huge number of activations (it should be all possible combinations of your 53 objects).
Anyway, there are a few fixes made to 4.0.1, including some that affect memory usage. One of the fixes we did was for increasing number of rule fires, as you can see in the following test case. Look for testOutOfMemory() method. It is a bit different of what you do, but using default 64Mb heap configuration, I left the test running 100million+ rule firings and the memory didn't blow up. The test is now limited to 3million fires so we can keep it as part of our build process. Before the fix, it was raising OOME on
1.7million fires.
http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
Personally I think 53 objects is absurdly low. We have real use cases of companies asserting millions of facts into the working memory at once and it works just fine, with real rule sets of hundreds of rules. Maybe they manifest themselves after reading this message.
If you think this is indeed a problem, may I ask you please to open a JIRA and submit us a self contained test showing the problem? I will profile your test and determine the causes and if it is a problem on the engine, I will fix it.
Thank you,
Edson
2007/8/29, Eymeric VIEUILLE <evieuille@gfi.fr>:
Hi !
I am currently leading a study that compares BRMS. The aim of this study
is to determine if a rules engine can be used for our application and
what rules engine to use.
I made a prototype and I encountered a big problem of memory : no more
than 53 objects could be passed as facts. After this threshold, I
encountered a java.lang.OutOfMemoryException :
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
I increased the memory allocated to the JVM, but the more I insert
objects as Facts and the more Drools becomes slower !
I think that the problem is exactly the same as the following one :
http://lists.jboss.org/pipermail/rules-users/2007-August/002592.html
Can you confirm to me that is the same problem ? And in a positive
affirmation, how to solve this problem ? And how much time would it take ?
I am using drools 4.0 (developing whith associated eclipse IDE).
I realized a dslr that looks like this :
package com.sample
import XXX.Message;
import XXX.MyObject;
expander leg_recognizer.dsl
rule "rule 1"
no-loop true
when
$m1 is an "OUT" marker
$m2 is an "OFF" marker
$m3 is an "ON" marker
$m4 is an "IN" marker
$m4 event date is more than $m1 event date
then
print "Rule 1"
display message $m1
display message $m2
display message $m3
display message $m4
make $m1 treated
make $m2 treated
make $m3 treated
make $m4 treated
create a object "1" with state "active";
end
rule "rule 2".............(same principle) --> 6 rules in the real file.
And it uses the following dsl file :
[condition][]{message} is an "{state}" marker={message} : Message(type
== "{state}")
[consequence][]print "{string}"=System.out.println("{string}");
[consequence][]display message {object}=System.out.println("Message : "
+ {object});
[consequence][]create a object "{id}" with state "{state}"=insert(new
MyObject("{id}", "{state}"));
[consequence][]make {message} treated=retract({message});
[condition][]{message1} event date is more than {message2} event
date=eval({message1}.isALaterEventThanMessage({message2}))
Did I made a mistake in the use of Drools or is this a bug ?
Thanks for answers...That's quite urgent !
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
Edson Tirelli
Software Engineer - JBoss Rules Core Developer
Office: +55 11 3529-6000
Mobile: +55 11 9287-5646
JBoss, a division of Red Hat @ www.jboss.com