IBM Support

IBM改进了非活动作业超时的处理

Technical Blog Post


Abstract

IBM改进了非活动作业超时的处理

Body

原文链接:http://ibmsystemsmag.blogs.com/i_can/2012/04/ibm-improves-the-handling-of-the-inactivity-timeout-.html

 

非活动作业超时(QINACTITV)系统值定义了在被采取行动之前,交互式作业处于非活动状态的时间的最小值。采取的行动由系统值非活动作业消息队列(QINACTMSGQ)来定义。与此相关的一个系统值,断连作业结束前的时间间隔(QDSCJOBITV) ,定义了作业被结束前能够处于断连状态多久。

 

为了解决两个长久以来的问题,在 7.1 的一个 PTF (补丁程序) 中,对非活动作业超时处理做了改变(其他的系统值未受影响)。

 

1.准确性。在此改变前,作业被采取行动前能处于非活动状态的时间最多可达 2 倍于指定的间隔。 这对于数小时级别的非活动时间间隔来说不确定性太高。

 

2.性能。当子系统检测非活动作业时,大量的作业有可能被同时结束。这些作业被结束时会影响整个系统的性能。

 

这个改变只在 7.1 版本中随 PTF SI46398 获得。它是一个延迟性的 PTF,这意味着使它生效或者失效都需要重启系统。 

 

首先我们来回顾一下关于准确性方面的改变。

 

在此之前,子系统在两次检查非活动交互式作业之间,都会等待 QINACTITV 定义的分钟数。在被检测到超时之前,作业能处于非活动状态的时间几乎 2 倍于检测间隔。如果某个作业正好在系统检查过非活动作业后开始运行,下次检测时它的非活动时间不会达到完整的间隔值, 这样直到接下来的检测间隔过后超时才会发生。比如你将 QINACTITV 设为 60 分钟,作业 可能会在处于非活动状态差不多 120 分钟后才能被检测到。

 

该 PTF 也改进了识别非活动作业的及时性。

 

QINACTITV 系统值仍在子系统进行周期性非活动作业检测时起作用,但随着这个改变,子系统会试图更频繁的检测来提高准确性。在大多数情况下,现在子系统会每 10 分钟检测一次非活动作业,也会跟踪作业已处于非活动状态多久。如果 QINACTITV 系统值小于 15 分钟,子系统会继续使用 QINACTITV 指定的值。(每 10 分钟检测一次非活动作业只在 QINACTITV 大于或等于 15 分钟才有帮助。)

 

不过现在作业能处于非活动状态的时间仍会比 QINACTITV 系统值 指定的时间长。对任意给定的 QINACTITV 值,你都能得到一个确切的作业在被采取行动前能处于非活动状态的时间值。作业进入非活动状态的时间点处于两次检测之间的某个时间。所以在 QINACTITV 的值能被 10 整除的这种简单的情况下,作业能处于非活动状态的时间不会大于 10 分钟加上 QINACTITV 的值。但在 QINACTITV 的值不能被 10 整除的情况下,子系统直到下次检测非活动作业时才会采取行动。例如当 QINACTITV 的值为 101,作业能处于非活动状态的时间最多能有 QINACTITV 加上 19 分钟。

 

考虑一下将 QINACTITV 的值设为 90 分钟的例子。旧的代码里,子系统会对处于非活动状态时间从 90 到 180 分钟的作业采取由 QINACTMSGQ 系统值定义的行动。但是新的代码里,子系统会对处于非活动状态 90 到 100 分钟的作业采取行动。

 

考虑另外一个将 QINACTITV 的值设为 45 分钟的例子。旧的代码里,子系统会对处于非活动状态 45 到 90 分钟的作业采取行动。但是新的代码里,子系统会对处于非活动状态 50 到 60 分钟的作业采取行动。

 

在被采取行动前,作业至少能处于非活动状态 QINACTITV 系统值指定的时间。但有时你可能对“至多”更感兴趣,而不是“至少”。如果你有这样一个需求:作业 处于非活动状态的时间不能长于某个指定的值,那么你需要将 QINACTITV 设置为比你想要的限定值小。旧的代码里,QINACTITV 的值必须是你想要的限定值的一半。但在新的代码里,你可将 QINACTITV 设置为更接近你想要的限定值。

 

如果将系统值 QINACTMSGQ 设为一个消息队列的名字,并且由消息 CPI1126 所指定的作业保持非活动状态,同时该作业没有被结束或断开连接时,另一个 CPI1126 消息会在子系统下一次检测非活动作业时发送到该队列。 该行为未被改变,但是子系统会更频繁的检测非活动作业。这可能会影响到任何正在处理该消息队列中消息的程序的逻辑。与之前相比,在获取另外一个针对给定作业的 CPI1126 消息之前,该程序的时间少了很多。

 

将 QINACTMSGQ 系统值(非活动作业消息队列)设为一个消息队列的名字仍很有用,因为这样你就能控制作业结束或断连,还能控制一次 可以处理多少作业。作业活动性并不规律,而且能被诸于午餐时间等外在因素影响。在同一个 10 分钟的间隔内,能有大量的作业变成非活动状态。 相比以小时为单位,以 10 分钟为单位不容易导致问题 。而且由于代码其他方面的变化,当交互式工作扩散到多子系统时就更不容易导致问题。

 

现在介绍一下该 PTF 提供的关于性能提升方面的内容。

 

现在同一时间启动的子系统将不再同时检查非活动作业。当子系统启动或系统值 QINACTITV 更新 时,现在子系统在设置非活动作业检查时会使用一个短但变化的延迟。这可以帮助减少某一时间断开或结束的作业数量。使用旧的代码时,你可以在启动各子系统之间引入延迟,这些延迟将或多或少地转化为不同子系统检查非活动作业时间的延迟。使用新的代码,每个子系统将会每 10 分钟检查一次, 但是系统会将这些检查分散来处理。如今,在启动的子系统间需要延迟的唯一原因是为了管理启动子系统时需要完成的大量工作。

 

当一个子系统启动非活动作业检查时,它并不清楚有多少其他子系统也需要做同样的工作。除了检查非活动交互式作业外,子系统还检查现在未使用的预启动作业的数量。PTF SI46398 分散了结束非活动交互作业和结束未使用的预启动作业的工作。

 

因为仍是子系统来检查非活动作业,所以很多和以前保持相同。但是现在系统可以更快的处理非活动作业并能更好的分配工作。这些都使 QINACTITV 的 结果更可预测,并将减少对系统整体性能的影响。 

 

在这里我要感谢 Dan Tarara 对这篇博客的大力支持;Dan 是 IBM i 工作管理团队的成员。谢谢,Dan!

 

原文作者:

Dawn May   dmmay@us.ibm.com    IBM in Rochester, Minnesota IBM i 软件架构师

翻译者:

徐海涛   xuht@cn.ibm.com   IBM中国系统与技术中心 负责 IBM Connections for i 的产品研发工作。

刘春霞   liucx@cn.ibm.com   IBM中国系统与技术中心 负责 IBM Connections for i 的产品测试工作。

了解更多关于 IBM i 的信息,请关注 IBM i 新浪官方微博@IBMiChina

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":"","Line of Business":{"code":"LOB57","label":"Power"}}]

UID

ibm11144858