死锁是这样一种情况,在该情况下两个或更多进程由于每一个进程都在等待其它进程进行而不能继续。死锁是协作内部因事件隔离而造成的并发性控制的副作用。有关事件隔离的更多信息,请参阅 Collaboration Development Guide。
图 77 举例说明由于以下事件序列引起的两个活动的协作组之间的死锁:
此时,所有协作都不能向前移。
本节包括以下主题:
缺省情况下,当启动 InterChange Server Express 时,InterChange Server Express 系统自动执行死锁检测。然而,当执行死锁检测时,如果协作组包含多个协作对象,则由于 InterChange Server Express 必须遍历组中的所有协作对象才能确定组中是否存在死锁,所以会延迟启动 InterChange Server Express。即使当死锁不存在时,这也会导致减慢启动速度。
可以将 InterChange Server Express 系统配置为不执行死锁检测。如果这样做,则系统将启动协作组,而不会首先检查死锁。这可以使 InterChange Server Express 有可能更快地引导。然而,如果不执行死锁检测而死锁存在,则以后发送至协作的事件可能失败。
系统管理器不提供设置 DEADLOCK_DETECTOR_CHECK 配置参数的能力。相反,要设置此配置参数,必须编辑 InterchangeSystem.cfg 文件并在此文件中更改该参数的值。
执行下列步骤来配置 InterChange Server Express 系统以进行死锁检测:
<tns:name>DEADLOCK_DETECTOR_CHECK</tns:name>
<tns:value xml:space="preserve">false</tns:name>
执行下列其中一个步骤来检查组协作死锁:
出现一个窗口,具有以下消息:
对此协作运行了以下诊断测试:
此消息后跟下列其中一个结果:
错误 11135:协作 collaboration_name 组的激活可能导致一个或多个现有的协作组出现死锁,因此被禁用。
此错误仅警告潜在的死锁情况。错误 11135 前面的参考消息确定有可能进入死锁的活动的协作组。
执行以下步骤来改正协作死锁:
通过在系统管理器的服务器配置屏幕的“数据库”选项卡中配置死锁重试设置,可以防止协作死锁。
执行下列步骤来配置死锁重试机制: