Enterprise JavaBeans (EJB) 高速缓存的大小会影响应用程序服务器的性能。调整 EJB 容器以优化性能级别的其中一个步骤是对 EJB 高速缓存进行微调。
开始之前
注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.log、SystemErr.log、trace.log 和 activity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件
bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用
HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。
关于此任务
以下过程描述如何使用诊断跟踪服务来帮助确定最合适的高速缓存大小。
过程
- 启用 EJB 高速缓存跟踪。 要了解如何使用跟踪服务,请参阅“使用跟踪”主题。
![[IBM i]](../images/iseries.gif)
有关跟踪服务设置的信息,请参阅“诊断跟踪服务设置”主题。设置跟踪以使用此跟踪字符串:
com.ibm.ejs.util.cache.BackgroundLruEvictionStrategy=all=enabled:com.ibm.ejs.util.cache.CacheElementEnumerator=
all=enabled
![[IBM i]](../images/iseries.gif)
将最大文件大小设置为 200MB 或更高值。如果保留缺省值
20MB,那么您可能会填满大小为 20 MB 的单个跟踪日志,并由于跟踪回绕而导致某些数据丢失。
![[IBM i]](../images/iseries.gif)
将最大历史文件数设置为 5。五个文件应该足够用,但如果发现所有五个文件已满并出现跟踪回绕,请增大此值。
![[IBM i]](../images/iseries.gif)
停止服务器,删除现有日志,然后启动服务器。
停止并重新启动服务器。
- 运行典型方案以捕获高速缓存跟踪数据。 通过在启用了跟踪的情况下运行典型方案,您会获得 EJB 高速缓存跟踪数据以便在下列步骤中进行分析。
- 查看和分析跟踪输出。
- 打开跟踪日志。 查找要显示的下列跟踪字符串中的任意一个或全部:
![[IBM i]](../images/iseries.gif)
BackgroundLru 3 EJB Cache: Sweep (1,40) - Cache limit not reached : 489/2053
BackgroundLru > EJB Cache: Sweep (16,40) - Cache limit exceeded : 3997/2053 Entry
Trace: 2007/03/22 11:47:07.048 01 t=7A9690 c=UNK key=P8 (13007002)
ThreadId: 0000006a
FunctionName: com.ibm.ejs.util.cache.BackgroundLruEvictionStrategy
SourceId: com.ibm.ejs.util.cache.BackgroundLruEvictionStrategy
Category: FINEST
ExtendedMessage: EJB Cache: Sweep (23,40) - Cache limit not reached : 0/2053
Trace: 2007/03/22 11:54:16.755 01 t=7BD3B0 c=UNK key=P8 (13007002)
ThreadId: 0000006d
FunctionName: EJB Cache: Sweep (75,37) - Cache limit exceeded : 3801/2053
SourceId: com.ibm.ejs.util.cache.BackgroundLruEvictionStrategy
Category: FINER
ExtendedMessage: Entry
在包括单词 Cache limit 的跟踪字符串中会发现比率。例如,3997/2053。第一个数字是当前在 EJB 高速缓存中的企业 Bean 数目(称为容量)。第二个数字是 EJB 高速缓存设置(后续步骤会提供更多信息)。在分析中使用此比率,尤其要用到容量。
同时,请查找语句
Cache limit not reached 和
Cache limit exceeded。
- Cache limit not reached
- 您的高速缓存等于或大于适当值。如果您的高速缓存大于适当值,那么表示您在浪费内存,应将高速缓存大小降低至更适当的值。
- Cache limit exceeded
- 当前使用的 Bean 数目大于指定的容量,指示高速缓存的调整不正确。因为 EJB 高速缓存设置并非硬限制,所以容量可能超出此设置。达到限制时,EJB
容器不会停止向高速缓存添加 Bean。这样做则意味着高速缓存已满时,不会完成对 Bean 的请求,或者至少会延迟,直到高速缓存跌至限制以下。可能会超出高速缓存限制,但 EJB 容器会尝试清除高速缓存并使其保持在 EJB 高速缓存大小以下。
如果超出高速缓存限制,那么您会看到类似以下的跟踪点:
![[IBM i]](../images/iseries.gif)
BackgroundLru < EJB Cache: Sweep (64,38) - Evicted = 50 : 3589/2053 Exit
EJB Cache: Sweep (64,38) - Evicted = 50 : 3589/2053
注意
Evicted =
字符串。如果见到此字符串,那么表示您在使用为选项 A 或 B 高速缓存配置的有状态会话 Bean 或实体 Bean。已驱逐对象意味着您未完全利用选择的高速缓存选项。第一步是尝试增加 EJB 高速缓存大小。如果继续运行应用程序导致出现更多驱逐,那么意味着应用程序正在 EJB 高速缓存扫描之间访问或创建的新 Bean 数目超出高速缓存所能容纳的数目,并且
不会重复使用现有 Bean。
您可能需要考虑对实体 Bean 使用选项 C 高速缓存,或者检查应用程序以了解不再需要有状态会话 Bean 时是否未除去这些 Bean。
注: 在事务中,使用选项 C 高速缓存配置的实体
Bean 是高速缓存中的唯一 Bean,并且在高速缓存中需要对整个实例挂起。因此,他们在高速缓存扫描中决不会被驱逐,但事务完成时会从高速缓存中除去。此外,如果将无状态会话 Bean 和/或实体 Bean 与选项 C 高速缓存配合使用,那么您可能需要将 EJB 高速缓存清除时间间隔增加至更大的数字。清除时间间隔可按“EJB 高速缓存设置”中所描述的那样设置。无状态会话 Bean 不在 EJB 高速缓存中,且由于使用选项 C 高速缓存的实体 Bean
决不会被高速缓存 (LRU) 策略驱逐,因此实际上不需要频繁地进行扫描。仅使用无状态会话 Bean 或选项 C 高速缓存时,只能在所显示的跟踪示例中看到“Evicted = 0”。
- 分析跟踪日志。 查找跟踪字符串 Cache
limit exceeded。
- 您会发现此字符串多次出现。请检查所有出现此字符串的位置以查找 EJB 高速缓存中 Bean 的最高容量值。将 EJB 高速缓存大小重置为大约此数字的 110%。后续步骤中会说明如何设置 EJB 高速缓存大小。
- 您可能找不到此字符串。这意味着未超出 EJB 高速缓存的容量(这是您的最终目标),但在初始分析中未出现此字符串也可能意味着高速缓存太大且占用了不必要的内存。在此情况下,仍然必须调整高速缓存,其方法是减小高速缓存大小,直到不超过高速缓存限制为止,然后将其增大至最优值。后续步骤中会说明如何设置 EJB 高速缓存大小。
最终的目标是将高速缓存限制设置为不会浪费资源且不超出限制的值。适当的设置仅对跟踪显示
Cache limit not reached 消息,并且容量比率会接近,但在 EJB 高速缓存设置的 100% 以下。
注: 建议不要将高速缓存大小设置为小于缺省值 2053 的任何值。
- 根据分析修改高速缓存设置。 有关如何执行此操作的信息,请参阅“EJB 高速缓存设置”。
![[IBM i]](../images/iseries.gif)
停止服务器,删除所有日志,然后重新启动服务器。
停止并重新启动服务器。
- 重复上述步骤直到对设置感到满意。
- 禁用 EJB 高速缓存跟踪。 正确调整高速缓存后,可除去跟踪,除去旧日志,然后重新启动服务器。
下一步做什么
通过分析,可以从 EJB 容器透视图将 EJB 高速缓存设置为最佳,但不能从 WebSphere®
Application Server 角度将其设置为最佳。高速缓存大小越大,命中率越高,EJB 高速缓存性能越好,但使用的内存越多。高速缓存占用的内存不能用于产品的其他方面,这会潜在地导致整体性能下降。如果系统的内存很充裕,那么这样做不会有问题,并且正确调整 EJB 高速缓存会提高整体性能。但是,在配置高速缓存时,应考虑此系统性能与 EJB 高速缓存性能。