KieBuilder 加载 kieFileSystem 和构建的时间太长

如何解决KieBuilder 加载 kieFileSystem 和构建的时间太长

我有一个基于 Drools 的应用程序,它总共有 15-20 个文件。每个文件都有针对特定上下文的规则。我根据要调用的上下文在会话中加载文件。最近执行的数量增加了很多,随之而来的是延迟下降。我发现构建 KieBuilder 需要很长时间,这与应用程序上的请求数量成正比。根据一些研究,看起来所有调用都在构建步骤停止,并在构建完成后继续。我不确定为什么会发生这种情况,因为从所有需要加载不同文件的意义上讲,调用都已断开。 我发现一些对 KieBuilder 的引用花费了太多时间,但找不到任何解决方案。

正在使用的 Drools 版本:7.4.1-Final

我的代码

private StatelessKieSession loadSession(final String namespace,final String path) {
        final KieServices kieServices = KieServices.Factory.get();
        final KieResources kieResources = kieServices.getResources();
        final KieFileSystem kieFileSystem = kieServices.newKieFileSystem();

        final InputStream ruleFile = ruleStore.getRulesForRuleId(namespace,path);

        kieFileSystem.write(kieResources.newInputStreamResource(ruleFile)
                        .setSourcePath(DRL_PATH)
                        .setResourceType(ResourceType.DRL));
        log.info("Creating KieBuilder for {}/{}",namespace,path);
        final KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll();
        if (kieBuilder.getResults().hasMessages(Message.Level.ERROR)) {
            throw new InvalidRulesException("Failed to load rules from S3 in "
                    + "Drools engine with error: " + kieBuilder.getResults().toString());
        }
        log.info("Created KieBuilder for {}/{}",path);

        final KieContainer kContainer = kieServices.newKieContainer(
                kieServices.getRepository().getDefaultReleaseId());

        return kContainer.newStatelessKieSession();
    }

排队时间太长:

        final KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll();

显示应用程序只为 KieBuilder 等待 20 秒的日志:

(http-bio-0.0.0.0-8080-exec-95) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/CafeteriaTimings.drl
12 Jan 2021 10:36:10,904 (http-bio-0.0.0.0-8080-exec-92) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MandatoryOffDays.drl
12 Jan 2021 10:36:10,911 (http-bio-0.0.0.0-8080-exec-82) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/ConsecutiveOffDaysPerWeek.drl
12 Jan 2021 10:36:10,912 (http-bio-0.0.0.0-8080-exec-93) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxWorkingHoursPerSiteWeek.drl
12 Jan 2021 10:36:10,916 (http-bio-0.0.0.0-8080-exec-53) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxTimeBetweenStartAndLunch.drl
12 Jan 2021 10:36:10,916 (http-bio-0.0.0.0-8080-exec-79) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxWorkingHoursPerDay.drl
12 Jan 2021 10:36:10,922 (http-bio-0.0.0.0-8080-exec-97) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/BreakFrequency.drl
12 Jan 2021 10:36:10,924 (http-bio-0.0.0.0-8080-exec-86) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxTimeBetweenStartAndBreak.drl
12 Jan 2021 10:36:11,004 (http-bio-0.0.0.0-8080-exec-90) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/CanLunchExistOutsideCafeteriaTime.drl
12 Jan 2021 10:36:11,004 (http-bio-0.0.0.0-8080-exec-87) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/LunchDuration.drl
12 Jan 2021 10:36:11,004 (http-bio-0.0.0.0-8080-exec-94) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxConsecutiveDays.drl
12 Jan 2021 10:36:11,005 (http-bio-0.0.0.0-8080-exec-83) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/LunchFrequency.drl
12 Jan 2021 10:36:11,010 (http-bio-0.0.0.0-8080-exec-85) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MinOffDaysPerWeek.drl
12 Jan 2021 10:36:11,015 (http-bio-0.0.0.0-8080-exec-88) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MaxWorkingHoursPerWeek.drl
12 Jan 2021 10:36:11,017 (http-bio-0.0.0.0-8080-exec-84) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MinWorkHoursBeforeLunch.drl
12 Jan 2021 10:36:11,018 (http-bio-0.0.0.0-8080-exec-96) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/BreakDuration.drl
12 Jan 2021 10:36:11,022 (http-bio-0.0.0.0-8080-exec-89) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/WorkIntervalsList.drl
12 Jan 2021 10:36:11,032 (http-bio-0.0.0.0-8080-exec-99) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:11,037 (http-bio-0.0.0.0-8080-exec-80) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MinTimeBetweenStartAndBreak.drl
12 Jan 2021 10:36:11,104 (http-bio-0.0.0.0-8080-exec-78) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/MinConsecutiveOffWorkHours.drl
12 Jan 2021 10:36:11,108 (http-bio-0.0.0.0-8080-exec-81) com.amazon.wforuleengine.drools.RulesSessionFactory: Creating KieBuilder for scheduling/amazon/cs/DayValidationType.drl
12 Jan 2021 10:36:11,203 (http-bio-0.0.0.0-8080-exec-100) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:11,322 (http-bio-0.0.0.0-8080-exec-2) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:14,324 (http-bio-0.0.0.0-8080-exec-1) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:15,224 (http-bio-0.0.0.0-8080-exec-3) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:16,207 (http-bio-0.0.0.0-8080-exec-4) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:16,404 (http-bio-0.0.0.0-8080-exec-6) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:16,503 (http-bio-0.0.0.0-8080-exec-5) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:17,003 (http-bio-0.0.0.0-8080-exec-7) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:17,203 (http-bio-0.0.0.0-8080-exec-8) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:18,513 (http-bio-0.0.0.0-8080-exec-9) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:19,122 (http-bio-0.0.0.0-8080-exec-10) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:19,803 (http-bio-0.0.0.0-8080-exec-11) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:19,903 (http-bio-0.0.0.0-8080-exec-12) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:20,114 (http-bio-0.0.0.0-8080-exec-13) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:20,213 (http-bio-0.0.0.0-8080-exec-14) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:20,407 (http-bio-0.0.0.0-8080-exec-15) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:20,703 (http-bio-0.0.0.0-8080-exec-16) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:21,303 (http-bio-0.0.0.0-8080-exec-17) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:21,503 (http-bio-0.0.0.0-8080-exec-18) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:21,603 (http-bio-0.0.0.0-8080-exec-19) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:21,603 (http-bio-0.0.0.0-8080-exec-20) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:23,711 (MetricAggregationClientScheduled-1) com.amazon.aws.cloudwatch.extension.client.impl.MetricAggregationCloudWatchClient: flush is invoked with sync false
12 Jan 2021 10:36:24,308 (MetricAggregationClientPublisher-1) com.amazon.aws.cloudwatch.extension.client.impl.MetricAggregationCloudWatchClient: Stats after submit are {}
12 Jan 2021 10:36:24,905 (http-bio-0.0.0.0-8080-exec-21) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:25,703 (http-bio-0.0.0.0-8080-exec-22) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:26,518 (http-bio-0.0.0.0-8080-exec-23) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:26,603 (http-bio-0.0.0.0-8080-exec-24) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:26,903 (http-bio-0.0.0.0-8080-exec-25) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:27,218 (http-bio-0.0.0.0-8080-exec-26) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:27,403 (http-bio-0.0.0.0-8080-exec-27) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:28,803 (http-bio-0.0.0.0-8080-exec-28) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:29,503 (http-bio-0.0.0.0-8080-exec-29) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:29,903 (http-bio-0.0.0.0-8080-exec-30) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:30,129 (http-bio-0.0.0.0-8080-exec-31) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:30,803 (http-bio-0.0.0.0-8080-exec-32) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:31,819 (http-bio-0.0.0.0-8080-exec-34) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:31,902 (http-bio-0.0.0.0-8080-exec-33) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:32,103 (http-bio-0.0.0.0-8080-exec-35) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:32,203 (http-bio-0.0.0.0-8080-exec-36) org.jboss.resteasy.core.Synchronousdispatcher: PathInfo: /ping
12 Jan 2021 10:36:32,219 (http-bio-0.0.0.0-8080-exec-90) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl54:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:32,322 (http-bio-0.0.0.0-8080-exec-90) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/CanLunchExistOutsideCafeteriaTime.drl
12 Jan 2021 10:36:32,613 (http-bio-0.0.0.0-8080-exec-82) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl80:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:32,613 (http-bio-0.0.0.0-8080-exec-82) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/ConsecutiveOffDaysPerWeek.drl
12 Jan 2021 10:36:33,913 (http-bio-0.0.0.0-8080-exec-79) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl76:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:33,913 (http-bio-0.0.0.0-8080-exec-79) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/MaxWorkingHoursPerDay.drl
12 Jan 2021 10:36:34,205 (http-bio-0.0.0.0-8080-exec-92) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl0:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,205 (http-bio-0.0.0.0-8080-exec-92) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/MandatoryOffDays.drl
12 Jan 2021 10:36:34,210 (http-bio-0.0.0.0-8080-exec-95) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl92:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,210 (http-bio-0.0.0.0-8080-exec-95) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/CafeteriaTimings.drl
12 Jan 2021 10:36:34,608 (http-bio-0.0.0.0-8080-exec-81) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl31:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,609 (http-bio-0.0.0.0-8080-exec-81) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/DayValidationType.drl
12 Jan 2021 10:36:34,615 (http-bio-0.0.0.0-8080-exec-85) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl8:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,615 (http-bio-0.0.0.0-8080-exec-85) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/MinOffDaysPerWeek.drl
12 Jan 2021 10:36:34,716 (http-bio-0.0.0.0-8080-exec-87) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl79:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:34,716 (http-bio-0.0.0.0-8080-exec-87) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/LunchDuration.drl
12 Jan 2021 10:36:35,218 (http-bio-0.0.0.0-8080-exec-94) org.drools.compiler.kie.builder.impl.KieRepositoryImpl: KieModule was added: MemoryKieModule[releaseId=org.default:drl94:1.0.0-SNAPSHOT]
12 Jan 2021 10:36:35,218 (http-bio-0.0.0.0-8080-exec-94) com.amazon.wforuleengine.drools.RulesSessionFactory: Created KieBuilder for scheduling/amazon/cs/MaxConsecutiveDays.drl

我想了解为什么 KieBuilder 所用的时间与调用次数成正比,以及一种优化所用时间的方法

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?