了解客户端限制

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2009-04-20

随着 Microsoft Exchange Server 2007 的发布,管理员可以使用称为 RPC 客户端限制的新功能来帮助管理最终用户性能体验。引入 RPC 客户端限制是为了帮助防止客户端应用程序每秒向 Exchange 服务器发送过多的 RPC 操作,发送的 RPC 操作过多可能会降低总体服务器性能。这些客户端应用程序包括通过用户邮箱内的每个对象进行搜索的桌面搜索引擎、写入以处理 Exchange 邮箱中数据的自定义应用程序、企业级的电子邮件归档产品或启用了 CRM 和电子邮件自动标记的邮箱。客户端限制使 Exchange 能够识别并帮助阻止少数用户垄断服务器的情况。当 Exchange 服务器将某个客户端识别为对服务器造成失衡影响时,服务器将向客户端发送“回退”请求,以减少对服务器的性能影响。

note注意:
在 Microsoft Exchange Server 2003 中,有一个名为“禁用 MAPI 客户端进程”的注册表项,如 A feature is available to disable MAPI program access to a computer that is running Exchange Server 2003(英文)中所述。可以启用此注册表项以帮助锁定某些进程,从而防止其连接到信息存储服务。在 Exchange 2007 中不再使用此注册表项,而是由这个新的 RPC 客户端限制机制所代替。

RPC 客户端限制如何工作

如果 Exchange 2007 服务器上的 RPC 平均延迟高于正常水平,则 Exchange 服务器用户可能会开始体验到明显的服务下降。RPC 平均延迟应保持在 100 毫秒以内,以保证最终用户在体验时可以接受。

RPC 客户端限制使用基于总体 RPC 平均延迟和远程操作 (ROP) 统计信息的计算方法确定给定客户端是否将开始接收回退请求,从而限制客户端可以针对服务器执行的操作数。此方法通过在给定一分钟内进行三次采样来计算 ROP 之间的平均延迟。此逻辑使用最后一分钟 ROP 速率的滚动平均值。确定此值之后,会将其与总体 RPC 平均延迟进行比较。如果此计算值大于总体 RPC 平均延迟,则会向客户端发送回退请求。

important要点:
只要最后一分钟的平均 RPC 延迟较小,每秒高 ROP 的短暂峰值就不会导致向客户端发送回退请求。

例如,如果您的 RPC 延迟为 25 毫秒,则运行良好的客户端每秒最多可以成功发送 40 个 ROP(40*25=1000 毫秒),而没有任何限制。如果 RPC 延迟增加至 100 毫秒,并且客户端尝试发送相同数量的 ROP,则该客户端将开始从服务器接收到回退请求。从此时起,服务器将仅允许客户端每秒最多发送 10 个 ROP,直到下一个 RPC 平均延迟采样再次低于 100 毫秒为止。

回退请求的逻辑包含两个主要部分。第一部分是服务器如何确定限制客户端,第二部分是如何确定阻止客户端访问服务器。在消息存储服务中,有一个客户端活动日志,它会针对任何给定服务器跟踪每个用户的活动。每个客户端活动日志都与用户 MAPI 会话相关联。如果服务器做出限制客户端的决定,则会向该用户 MAPI 会话的会话回退队列添加一个回退请求。然后,使用此回退信息确定服务器是接受还是拒绝客户端请求。如果用户在单个 MAPI 会话中打开了多个邮箱,则此回退信息将应用于该 MAPI 会话的所有邮箱。

根据使用的 Microsoft Office Outlook 版本,服务器将向客户端的 RPC 响应流发送不同的回退信息。

  • 对于 Microsoft Office Outlook 2007 客户端,会向用户的回退队列添加 ropBackoff 请求。此请求包含与当前回退延迟有关的信息,并告知客户端在指定时间内延迟向服务器发送任何其他请求。客户端在指定时间之后将重试发送请求。此回退延迟的最长时间被硬编码为 2000 毫秒或两秒钟。

    note注意:
    对于 Exchange 2007 服务器,我们建议使用 Outlook 2007 客户端,以使客户端体验达到最佳。
    note注意:
    ropBackoff 是 Outlook 2007 中的新功能,早期的 Outlook 客户端无法使用此功能。
  • 对于 Microsoft Office Outlook 2003 或更早版本,会发送状态代码 RPC_S_SERVER_TOO_BUSY。此状态代码模拟信息存储 RPC 线程耗尽时,Exchange 2003 服务器发送到客户端的响应。早期版本设计为捕获此异常,然后等待一段时间,再按照从服务器到客户端的响应中所指定的重试调用。此延迟的默认时间为 1 秒。如果客户端在一分钟之内的每一秒都尝试该请求而每次仍接收到相同的异常,则该客户端将放弃操作,并断开与 Exchange 服务器的会话。

监视每秒的 RPC 操作次数多的情况

若要帮助检测何时回退客户端,可以在安装了邮箱服务器角色的 Exchange 服务器上监视性能计数器 MSExchangeIS\RPC Client Backoff/sec,以确定回退请求发生的速率。

计数器 Outlook 2007 中的预期值 Outlook 2003 和早期版本中的预期值

MSExchangeIS\RPC Client Backoff/sec

服务器通知客户端回退的速率。

每个客户端 50 个

每个客户端 1 个

对于已受到限制的 Outlook 2007 客户端,可以预计 MSExchangeIS\RPC Client Backoff/sec 计数器每秒为每个客户端显示约 50 个回退。对于 Outlook 2003 和早期版本,应该预计每秒最多为每个客户端显示一个回退。预期速率之间的差异是由于各个客户端所使用的回退方法的粒度不同所致。Outlook 2003 的最小回退期为一秒,而 Outlook 2007 的最小回退期为一毫秒。

将回退信息发送至客户端之后,数据包含两个部分。第一部分是插入回退的时间。第二部分是回退期的持续时间。回退期的持续时间根据以下公式进行计算:(MSExchangeIS\RPC Average Latency * RPC 限制指数)/1000。默认情况下,RPC 限制指数的值为 1000。这意味着回退期与 RPC 平均延迟的值刚好相同。服务器发送给客户端的回退值是回退期到期之前的毫秒数。如果客户端在指定回退期到期之前向服务器发送其他操作,则服务器将返回其他 ropBackoff 和更新的延迟值。在回退期到期之前,这种情况会继续发生,因此请从用户的回退队列中删除 ropBackoff。下图中显示了性能监视器中这种情况的类似样例:

性能监视器的 RPC 客户端回退

调整每秒的 RPC 操作次数多的情况

在安装了邮箱服务器角色的 Exchange 服务器上,可以使用一个注册表项帮助调整限制计算。该注册表项称为**“RPC 限制指数”**,位于 HKLM\System\CurrentControlSet\Services\MSExchangeIS\ParametersSystem 项之下。

note注意:
默认情况下不设置此值,必须作为 DWORD 值将其添加到之前提到的项之下。

[HKLM\System\CurrentControlSet\Services\MSExchangeIS\ParametersSystem]

RPC 限制指数

DWORD:可以是介于 0-5000 之间的值

若要显示如何修改 RPC 限制指数,请考虑要将服务器配置为较长时间内回退客户端的情况,例如 2 x RPC 平均延迟。可以通过将 RPC 限制指数设置为值 2000 来完成以上操作。这会使每个 MAPI 会话的回退期增加 1 倍。在这种情况下,如果 RPC 平均延迟为 50 毫秒,则 2000 (50 ms * 2000/1000) 的限制指数将等于 100 毫秒。每个回退请求都会延长至 100 毫秒,而不是默认的 50 毫秒,因此发送至服务器的其他客户端 MAPI 请求会延迟至 100 毫秒。请您了解,对客户端来说,这样的配置更改可能会显示为服务器性能降低的现象。但是,如果此客户端对总体服务器性能有不良影响,则此客户端对 Exchange 服务器上的资源的使用率将达到最小。对于服务器上的其他所有用户,这样可以明显感觉到提高了服务器性能。

important要点:
如果服务器上的许多或所有客户端都发生此问题,则应执行服务器端调查以检测可能发生的任何瓶颈。

要使用此限制机制达到最佳体验,建议至少使用 Outlook 2007 和 Exchange 2007。

可以通过将限制指数设置为 0 值来禁用限制。

important要点:
我们建议不要禁用信息存储中的客户端限制。做出此更改将导致运行状况不良的客户端降低任何给定服务器的性能。

如果您确信您必须禁用客户端限制,我们建议您先确定服务器上性能瓶颈的原因。在大多数情况下,该原因的确定和解决方案都将解决服务器向客户端发送回退请求的需求。

详细信息

有关如何解决 RPC 请求处理较慢问题的信息,请参阅解决 RPC 请求处理速度慢的问题

有关如何启用客户端监视的信息,请参阅如果启用客户端监视功能