WebSphere ILOG JRules BRMS V7.1 性能调优指导

 

性能调整指导

提供了一些一般建议以帮助提高性能。性能调整的目的在于降低应用程序服务器处理申请所花费的时间和资源。性能调整让您的应用程序服务器能够用更少的时间完成更多的任务。

本章中

改进 Rule Execution Server 性能

您可禁用 Java 2 Security,从而改进 Rule Execution Server 的性能。

改进 Rule Team Server 性能

您可改进体系结构使其符合您的使用要求,从而提高 Rule Team Server 的性能。

改进 Decision Validation Services 性能

您可在不同的计算机上安装 Rule Execution Server 和 Rule Team Server,从而改进 Decision Validation Services 的性能。

为应用程序提供更多内存

运行 JRules 模块时,您可能会遇到核心转储或 Java 内存不足错误。在此列出的过程将帮助解决问题。

 

改进 Rule Execution Server 性能

在应用程序的开发阶段中,可以执行一些操作来增强规则集的执行性能:

开发工件

建议

执行对象模型 (XOM)

将执行对象模型 (XOM) 的大小简化为使用的类。

规则集执行方式

带有多个算法的规则集比带有单个算法的规则集耗用更多内存。例如,带有 RetePlus 与串行或者 RetePlus 与 Fastpath 的规则集比只使用 RetePlus 的规则集耗用更多内存。

Java XOM 

在 EAR 中部署的 Java XOM 的大小对解析和执行级别有影响。Java XOM 必须是线程安全的。如果远程调用 Rule Execution Server,那么 Java XOM 必须实现可序列化。

XML XOM 

使用 XML XOM 的规则集应该配置为在多个同时的执行中运行,方法是配置 XML 文档驱动程序的池。使用 ruleset.xmlDocumentDriverPool.maxSize 规则集属性来设置值。缺省值是 1。

已开发应用程序并将其部署到应用程序服务器后,存在对性能有影响的若干配置步骤:

配置

建议

Rule Execution Server 日志

在生产环境中将日志级别设置为严重或警告。可以在 Rule Execution Server 的资源适配器中 (ra.xml) 访问该属性。

执行单元(XU)

应该调节执行单元 (XU) 池大小以均衡会耗用内存的连接数。

规则会话工厂

规则会话工厂应该唯一且在 HTTP 会话之间共享。将在每次创建工厂时执行 JNDI 查找。

事务

如果没有在引擎级别使用带状态的规则会话和事务,那么在 Rule Execution Server 中停用事务支持,并在 ra.xml 文件中的属性内设置 NoTransaction 而不是 LocalTransaction。

类路径

只使用类路径中最新的规则会话库。

垃圾收集器

调节 GC 和内存大小。

规则集更新

如果在应用程序中更新规则集,请使用异步解析。在 ra.xml 文件的属性中提供了该选项。

因为 Java 2 Security 相对较新,许多现有的或甚至新的应用可能未准备好应对 Java 2 Security 所能执行的高度严格的访问控制编程模型。如果这些应用尚未准备好应对额外的安全检查,则管理员应该了解启用 Java 2 Security 后可能产生的后果。
Java 2 Security 对应用开发人员和管理员提出了一些要求。在您启用 Java 2 Security 之前,您需要确保所有的应用都获得了要求的许可权。

性能

建议

Java 应用程序

启用 Java 2 Security 后将会降低性能。您可以调整自己的安全配置以最小化它所产生的影响。启动 Java 2 Security 时请意识到您的应用的性能将受到影响。应用服务器安全模式可集成 Java 2 Security,但这并不是强制的。
如果一个应用尚未做好使用 Java 2 Security 的准备,那么这个应用很可能导致 Java 2 Security 在运行时发生访问控制意外并可能出现运行错误。

 
   

 

 

改进 Rule Team Server 性能

Rule Team Server 对 CPU、内存和数据库资源的消耗非常大。为了确保可扩展性,硬件体系结构应该设置成支持使用需求。Rule Team Server 被设计成可由几个用户同时访问。每次用户访问 Rule Team Server URL 时,会在服务器上创建一个 HTTP 会话,并在会话期间填入若干对象,包括当前 IlrSession,用于支持界面中使用的 JSF 组件模型的一些 Java bean,以及一些 Web 组件(Intellirule 编辑器和决策表编辑器)。一个会话需要的内存使用量难以估算,因为它取决于许多因素,包括 GUI 中执行了哪些操作、VM 以及库的结构。如果同时连接至单个服务器的用户数量不在单个 VM 所分配的内存范围内,您应该在一个服务器集群中安装 Rule Team Server 并使用负载均衡,这样 HTTP 会话就会按照服务器的可用内存进行分配。
根据使用 Rule Team Server 的用户数量以及他们经常执行的操作, CPU 的数量也可能是一个极其重要的资源。解析一个 BAL 规则或决策表是一个原子作业,它使词汇表实例中的一个锁定被使用。绝大多数的长时间运行操作(规则集生成、报告等等)也消耗大量的 CPU。这意味着,如果许多用户同时访问同个项目,浏览库或运行规则集生成、共享的词汇表等长时间的操作将成为一个瓶颈。这增加了安装 Rule Team Server 到集群中的需要。
绝大多数的 Rule Team Server 操作执行 SQL 查询。由于一些查询可能耗时很长,请考虑将应用服务器和数据库部署到不同的计算机上,以便推动 Java 计算和数据库访问之间的负载分配。这可以改进多用户连接至库时的用户体验。另外也请将数据源的 JDBC 连接池设置为一个等同于可同时连接至 Rule Team Server 的最大用户数的数目。如果池太小,当用户的会话正试图访问数据库时,他们可能会以连接超时告终。
缺省条件下,Rule Team Server 事务超时被设置为 10 分钟,也就是说,超过规定时间后事务将回滚(操作被中断)。如果您有一个大型存储库并且认为某些操作可能会耗费更多时间,您可以在 Rule Team Server EAR 文件的 web.xml 文件中增加超时值。
下表概述了建议的几个改进:

性能

建议

硬件体系结构和 CPU 使用率

设置充足的硬件以支持使用需求。

在服务器集群中安装 Rule Team Server 并使用负载均衡,这样 HTTP 会话就会按照服务器的可用内存进行分配。

数据库访问

在不同的计算机上安装应用服务器和数据库。

请将数据源的 JDBC 连接池设置为一个等同于可同时连接至 Rule Team Server 的最大用户数的数目。

事务超时

如果用户在大型存储库中执行比较耗时的操作,请在 Rule Team Server EAR 文件的 web.xml 文件中增加超时值。

 
   

改进 Decision Validation Services 性能

为了改进 Decision Validation Services 的性能,请安装您用来在不同的计算机上运行测试的 Rule Execution Server 和 Rule Team Server 的实例。这个分离可在 Rule Execution Server 因执行测试套件或模拟操作而消耗资源时,减少对 Rule Team Server 资源(CPU 和内存)的影响。
每次从 Rule Team Server 运行一个测试套件时,就会在 Rule Execution Server 上创建、部署和解析一个新的 RuleApp。这意味着 Rule Execution Server 上的解析消耗无法避免。因此需要专门拨出一个 Rule Execution Server 实例来测试规则。当使用 Decision Validation Services 进行测试和模拟时,不要使用实际执行的 Rule Execution Server。
下表概述了建议的几个改进:

性能

建议

CPU 和内存

安装您用来在不同的计算机上运行测试的 Rule Execution Server 和 Rule Team Server 的实例。

Rule Execution Server 

不要在测试和模拟时使用实际执行的 Rule Execution Server。
如果将规则集属性 ruleset.sequential.trace.enabled 设置为 true,那么执行规则或任务时,在生成事件期间将增大内存使用率。决策仓库的性能取决于数据库。要增强性能,请优化数据库以处理规则集的具体情况的 CLOB 数据。

生成执行跟踪将增大内存使用率,因为会高速缓存规则和任务的列表,并会生成规则事件。过滤被跟踪的对象可以帮助尽量降低与执行跟踪关联的性能开销。如果在跟踪过滤器 setInfoBoundObjectByRule 设置为 true 时调用执行跟踪,那么 toString 方法可能会影响性能。

XU 池

将 XU 池大小设置为低于总可用内存除以规则集最大内存量(在 SSP 的 ra.xml 中设置,或在应用程序服务器的 JCA 连接工厂中加以配置)所得结果。
如果您为虚拟机分配了 1 GB,并且执行的规则集占据内存的 500 MB,则 XU 池的大小必须低于或等于 2。

SSP 池

将 SSP 池大小设置为 XU 池大小的一半(SSP WAR 的 web.xml 中的 JRULES_JOBS_POOL_SIZE)。
运行测试套件将在 Rule Execution Server 上创建两个规则集,因此 SSP 池可降低不必要地过载 XU 池的风险,并避免了测试套件或模拟执行中瓶颈的产生。

以下文章点击率最高

Loading…


发表评论

电子邮件地址不会被公开。 必填项已用*标注