基于Drools数据转发场景测试
环境信息
操作系统:CentOS Linux release 7.4.1708 (Core)
机器配置:8c 16g
规则信息
写了个简单个规则DRL文件,此规则对应我们业务场景的数据转发流程,非常有代表性。就是对数据进行账户、产品key、是否属于某个标签的过滤,脚本如下:
package drools.example;
import org.drools.example.api.namedkiesession.Message;
function int hasProductLabels(String deviceLabels,String labels){
return deviceLabels.indexOf(labels)==-1?0:1;
}
rule "g1_mytest"
when
$msg : Message(orgId =='11111' && productKey=='cu3im1kts3rz8dSc')
&& eval(hasProductLabels('101,102,103',$msg.getProductLabels())>0)
then
end
rule "g1_mytest1"
when
$msg : Message(orgId =='11111' && productKey=='cu3im1kts3rz8dSc')
&& eval(hasProductLabels('101,102,103',$msg.getProductLabels())>0)
then
end
...
场景一 数据转发,1000规则,匹配100万次。
java -Dcom.sun.management.jmxremote.port=20217 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=172.30.xxx.yyy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=. -jar drools-test.jar getForwardRules 10 1000000
通过jvisualvm.exe来监控相关资源使用情况:
场景二 数据转发,2000规则,匹配100万次。
场景三 数据转发,5000规则,匹配10万次。
场景四数据转发,10000规则,匹配10万次。
1万规则512M内存已经不够用,需要配置为1G。
java -Dcom.sun.management.jmxremote.port=20217 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=172.30.127.85 -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=. -jar drools-test.jar getForwardRules 100 100000