![[z/OS]](../images/ngzos.gif)
优化本地适配器性能注意事项
使用 WebSphere® Application Server for z/OS® 优化本地适配器 API 时,需要考虑与性能有关的若干方面。
优化本地适配器 API 旨在为 WebSphere Application Server for z/OS 上外部地址空间和应用程序之间的调用提供优化的性能,这些 API 旨在建立新种类的应用程序模式,以便支持在这些环境中的应用程序之间进行细粒度的交互。以下信息描述了要了解的与优化本地适配器和性能相关的问题。此内容旨在帮助您了解使用优化本地适配器以获取最佳性能的配置选项。在此不会记录将优化本地适配器与其他在同一个系统(例如,SOAP over HTTP)上的 WebSphere Application Server 和外部地址空间之间进行同步调用的技术相比的基准结果。有关此信息,请阅读 WebSphere Application Server for z/OS 性能报告。
选择注册 API 调用的最小连接值和最大连接值
建议在注册 API 调用上不要对最小连接数参数选择太高的值,因为这样将降低性能。这样将导致从外部地址空间调用 WebSphere Application Server 控制区域,以建立每个连接并在注册 API 调用期间将其添加到优化本地适配器连接池。与服务器建立这些连接之后,这些连接将一直保持到接收到“注销 API”调用为止;接收到此调用时,WOLA 会断开与服务器的连接,并从可用的连接池中移除这些连接。将最小值设置得过高会导致使用更多的内存,并将路径长度开销添加到注册 API 和注销 API。请选择最适于您的需求的“最小连接数”值。如果预期可能有上百个线程同时共享注册,那么在注册期间支付连接开销可能有意义。如果预期共享注册的并发线程数较少,那么建议您将“最小连接数”设置为较小的值。
注册 API 最大连接数参数为注册的优化本地适配器连接池中的连接数提供了一个范围。此值在注册期间不可扩展。如果并发连接获取请求数超出了此值,那么调用的线程将等待在连接获取、调用、接收任何请求或主机服务 API 的“等待时间”参数上设置的秒数以使连接可用。此时间到期后,将传递回返回码和原因码,表示在等待时间到期之前,无法获取请求的连接句柄。任何单个注册的连接池都有最大大小,此最大大小可以设置。 此值源自单元范围的环境变量 WAS_DAEMON_ONLY_adapter_max_conn。 为此变量提供的缺省值是 100。可以使用管理控制台来更改此值。此设置更改后,必须重新启动守护程序。
最小连接设置和最大设置对优化本地适配器 CICS 链接服务器的影响
在客户信息控制系统 (CICS®) 下启动链接服务器任务(使用 BBOC START_SRVR)时,如果未传递最小连接数 (MNC) 和最大连接数 (MXC) 参数,那么缺省情况下,MNC 注册设置为 1,MXC 为 10。这表示启动的链接服务器 (BBO$) 任务可同时启动和运行的链接调用任务(BBO# 任务)数为 10。该数字将转换为可运行和启动 CICS 目标程序的 WebSphere Application Server 的并发线程数。MXC 链接服务器参数的设置必须反映预计要在链接服务器的此实例下启动的典型目标 CICS 程序的预计持续时间。如果大部分目标 CICS 程序都是长时间运行的,那么最好使用较大的 MXC 值来保持请求可高效地从 WebSphere Application Server 流向 CICS。如果目标程序只是短期活动,那么较低的 MXC 设置更有效。
请确定正确的 MXC 设置还应考虑有多少 WebSphere Application Server 服务方区域与特定注册名称下的链接服务器进行通信。如果单个服务方区域运行时线程选项设置为 ISOLATE,那么一次在该服务方中只能将一个线程发送到 CICS,所以 MXC 值将设置为服务方数乘以 1 以确保不存在瓶颈。如果运行时线程设置为 LONGWAIT,在这种情况下,根据预计的请求数和调用的 CICS 程序类型以及是长期运行还是短期活动,每个服务方中最多可有 40 个线程处于活动状态,此时应根据从服务方到针对特定注册名称运行的链接服务器的预计并行请求数来设置 MXC。可能需要一些实验才能确定最佳 MXC 设置。从较小的数字开始尝试,然后逐渐增加,直到找到吞吐量最佳时的值为止。
共享 64 位内存
最佳的本地适配器支持要求 WebSphere Application Server for z/OS 服务器以 64 位方式运行。守护程序组首次启动且 WAS_DAEMON_ONLY_enable_adapter 值设置为 true 或 1 时,WebSphere Application Server 将在条形存储器上分配一个 64 位共享内存缓冲区并对其进行初始化。此区域的缺省大小是 32MB。优化本地适配器共享的控制结构全部位于此缓冲区中。消息数据不在此处进行高速缓存。 消息和上下文数据使用 WebSphere Application Server for z/OS 本地通信地址空间间技术在外部地址空间和 WebSphere Application Server 服务方区域之间流动,该技术将消息数据放入服务器地址空间中。对于大型消息,这是条形存储器上方的 64 位方式。目前,WebSphere Application Server 本地通信支持的最大消息大小为 2GB,而在初始的优化本地适配器支持中,这是对于单条消息所支持的最大大小。
F <server_name>,DISPLAY,ADAPTER,REGISTRATIONS
从显示输出中,您应可以确定是什么作业仍在使用且没有释放注册,并通过重新启动注册来纠正问题。如果在分析后,发现缺省的 32MB 太小而不能满足守护程序组的需求,那么可使用 WAS_DAEMON_ONLY_adapter_max_shrmem 单元范围的环境变量来更改此值。更改此值一定要经过慎重的考虑。它需要重新创建优化本地适配器共享的条上内存缓冲区,而该操作只能使用系统的 IPL 来完成。
您可以粗略地估计所需的内存量。每个客户机注册需要使用 392 字节的共享内存,再加上每个连接需要 112 字节的共享内存。具有最大值 100 个连接的注册使用大约 12 KB 的共享内存。每个客户机线程(必须等待可用的连接,而所有连接都是处于使用状态中)额外使用 80 字节。注册托管的每项服务额外使用 336 字节。
200 Registrations x 392 bytes=78,400 bytes
200 Registrations x 200 connections x 112 bytes=4,480,000 bytes
200 Registrations x 1000 waiters x 80 bytes= + 16,000,000 bytes
--------------------------------
20,558,400 bytes
33,554,432 bytes – 20,558,400 bytes=12,996,032 bytes remaining
/ 336 bytes per service
----------------------------------
38,678 Services
增加或减少共享内存的大小时,请记住条上共享内存是按 1MB 区段进行分配的。WebSphere Application Server 会将您指定的值向上舍入为最接近的 MB 数。控制来自 WebSphere Application Server 的最大并发出站调用数
存在一个守护程序范围的缺省设置,它控制针对优化本地适配器支持的单个注册,WebSphere Application Server 调用的最大并发出站数。控制此项的变量是 WAS_DAEMON_ONLY_adapter_max_serv。缺省值是 100。这意味着在单个注册(并发主机服务、接收任何请求或接收特定于请求的 API 调用)下运行的不同目标服务数不能超过 100。如果更改了此值,那么需要重新启动守护程序。
使用缺省值 100 时,为了此目的,使用这三个 API 中的其中一个将线程设置为特定注册名称的第 101 个服务器时,将导致出现非零的返回码和原因码,表示已达到 adapter_max_serv。如果 WebSphere Application Server 中的应用程序寻找此服务,但无法马上提供此服务,那么应用程序缺省情况下会等待 30 秒,然后接收到异常,表示等待请求的服务时出现超时。在 WebSphere Application Server 服务方日志中,这将显示为 C9C24C15 次代码。通过在 Java™ EE 连接器体系结构 (JCA) ConnectionSpecImpl 上使用 setConnectionWaitTimeout() 方法,应用程序可以修改此超时的缺省值 30 秒。
优化本地适配器 CICS 链接服务器性能注意事项
CICS 链接服务器的优化本地适配器支持可用于提供一种从 WebSphere Application Server for z/OS 上运行的应用程序调用现有 CICS 应用程序的简单方法。使用 BBOC 事务或 CICS PLTPI 程序 BBOACPL2 启动链接服务器时,优化本地适配器链接服务器任务 (BBO$) 将启动并从 WebSphere Application Server 接收程序链接请求。然后将启动程序链接任务 (BBO#),该任务将向目标程序发出 EXEC CICS LINK、接收响应并将响应发送回 WebSphere Application Server 调用者。此支持的一部分涉及声明 WebSphere Application Server 应用程序线程级标识并将其传播到目标 CICS 任务。标识的传播和声明使用 BBOC START_SRVR 命令上的 SEC=Y 参数来进行请求。
运行链接服务器时如果 SEC=N 且使用了启动链接服务器的用户标识,这样会产生更好的性能,但可能不符合您组织的安全和审计要求。
运行时带有 REU=Y 选项意味着程序链接任务 (BBO#s) 保持活动状态,启动后,要到为注册输入 BBOC STOP_SRVR 或 BBOC UNREGISTER 才能停止。如果运行时 BBOC START_SRVR 上的 MXC 值较高并且有大量请求同时到达,那么 BBO# 任务数可变得很高,并且它们在链接服务器停止之前不会终止。这是确定是否使用 REU=Y 以及 MXC 的正确值时需要考虑的另一个问题。
如果目标是从 WebSphere Application Server 调用到 CICS 下的应用程序时获得最快性能,那么考虑直接在应用程序中对主机服务 (BBOA1SRV)、接收任何请求 (BBOA1RCA) 或接受特定请求 (BBOA1RCS) API 进行编码。这样的话,就不会像链接服务器那样对标识传播提供内置支持,但是如果这一点不是必需的,而性能又十分重要,那么直接使用 API 可能是最佳选项。
JCA 注意事项
使用优化本地适配器 JCA 资源适配器时,请记住每个从 ConnectionFactory 对象获得的连接会有额外开销。如果应用程序必须通过同一个应用程序方法对外部地址空间或 CICS 进行多个调用,那么与对每个交互使用不同的连接相比,对每个交互使用同一连接将获得更高性能。另外,JCA 交互对象可在同一个应用程序方法中重复使用。
为优化本地适配器创建 JCA ConnectionFactory 时,可以修改该 ConnectionFactory 的 JCA 连接池的最大大小和最小大小。此连接池代表逻辑连接,这些连接在交互期间会绑定到物理连接(在 BBOA1REG 注册调用上指定的物理连接)。 为获得最佳性能,JCA 连接池的大小应与 BBOA1REG 期间设置的物理连接池的大小相同。如果 JCA 连接池设置得太小,即使存在可用的物理连接,应用程序也可能需要等待 JCA 连接对象。所有的服务方区域共享您的物理连接池,所以如果您有多个服务方区域,那么可能要减少每个服务方区域的 JCA 连接池大小以保持所有服务方区域的 JCA 连接总数符合物理连接池的大小。