We have a program that validates large amount of data. When changing this
program to use drools 6.0.1 instead of 5.5.0, this GC overhead limit
exceeded problem occurred.
Program reads one object to memory, then validate it and then retract it.
This is repeated thousands of times.
java version "1.7.0_45"
java options:
JVM_ARGS="$JVM_ARGS -Xmx256m"
JVM_ARGS="$JVM_ARGS -XX:+HeapDumpOnOutOfMemoryError"
JVM_ARGS="$JVM_ARGS -XX:HeapDumpPath=/home/heapdumps"
I also tried different java garbage collection options: -XX:+UseSerialGC,
-XX:+UseParallelGC and -XX:+UseConcMarkSweepGC, but it did not help.
Heapdump says that:
One instance of "org.drools.core.reteoo.JoinNodeLeftTuple" loaded by
"sun.misc.Launcher$AppClassLoader @ 0xf03a13a8" occupies 203,920,080
(98.40%) bytes.
This error is reproduced with rules below. These rules add one object to
memory, then there is one rule that evaluates that object, and after that
the object is retracted. This is repeated in continuous loop, but memory
runs out soon.
package com.cat
declare ValidationError
jee : String
end
declare cat2
name : String
age : Integer
end
rule 'add cat2'
dialect 'mvel'
salience 3000
when
not(exists(cat2()))
then
System.out.println("insert cat2");
$p = new cat2()
insert ($p);
modify ($p){
name = "mau"
};
end
rule 'this rule does not fire'
dialect 'mvel'
salience 4500
when
$k1 : cat2($name : name != "miau")
$k2 : cat2($nameofcat2 : name == "miau")
then
modify ($k1){
name = $nameofcat2
};
modify ($k2){
name = ("miau")
};
System.out.println("this rule does not fire");
end
rule 'retract cat2'
dialect 'mvel'
salience -50
when
$c2 : cat2()
then
retract($c2);
System.out.println("retract cat2");
end
query "getValidationErrors"
validationError: ValidationError()
end
--
View this message in context:
http://drools.46999.n3.nabble.com/Drools-6-0-1-GC-overhead-limit-exceeded...
Sent from the Drools: User forum mailing list archive at
Nabble.com.