如何计算脱水
若要计算冻结,则需要使用已配置的属性和某些运行时值。 下面的示例演示如何计算假设的冻结方案。
计算冻结
让 alpha 表示一个介于 0 和 1 之间的因子,以测量内存使用状况。 在实际操作中,alpha 有 3 个不同的部分分别与 3 个内存阻止标准(冻结属性)对应;在本示例中,我们将它们分别表示为 alpha(virtual)、alpha(private) 和 alpha(physical)。 定义以下内容:
IF ActualPrivateBytes < OptimalUsage alpha(private) = 1 ELSE IF ActualPrivateBytes > MaximalUsage alpha(private) = 0 ELSE alpha(private) = (MaximalUsage - ActualPrivateBytes) / (MaximalUsage - OptimalUsage)
注意
OptimalUsage 和 MaximalUsage 具有每个冻结属性的默认值。 可以在 BTSNTSvc.exe.config 文件中更改这些值。 有关详细信息,请参阅 解除冻结默认属性。
用同样的方法定义其他 alpha 成分。 定义以下内容:
alpha = Minimum { alpha(virtual), alpha(private), alpha(physical) } where alpha(…) = 1 whenever IsActive=false for that given memory unit
然后定义 TestThreshold(以秒为单位定义 TestThreshold、MinThreshold、MaxThreshold):
TestThreshold = MinThreshold + (alpha * (MaxThreshold – MinThreshold))
注意
MinThreshold 默认值 = 1。 MaxThreshold 默认值 = 1800。 可以在 BTSNTSvc.exe.config 文件中更改这些值。 有关详细信息,请参阅 解除冻结默认属性。
然后定义 TimeBlocked 和 EstimatedTime:
TimeBlocked = 我们等待满足此订阅的实际时间
EstimatedTime = 此业务流程保持空闲的估计时间(例如,侦听的剩余超时)
是否冻结取决于下面布尔值条件的结果(true = 冻结):
- Dehydrate = (EstimatedTime > TestThreshold OR TimeBlocked > (2* TestThreshold) )
注意
估计时间是至延迟结束的剩余时间(如果延迟 5 分钟,过去了 2 分钟,则 TimeBlocked=120 秒,EstimatedTime=180 秒)。