为何release块无法正常释放seize块中已占用的motrice资源
问题排查步骤
- 先检查
Seize块属性,确认没有勾选「Resource is kept until agent is destroyed」选项,勾选后仅能在agent销毁时自动释放资源,手动调用Release块无法生效。 - 核对
Release1块的资源配置:- 确认选择的资源池与Seize时占用的motrice资源池完全一致,没有误选其他相似名称的资源池
- 如果你选择的是「Release all resources of type」模式,确认下拉选择的类型是motrice对应的资源类型
- 如果你选择的是「Release specific resource unit」模式,确认你填写的资源单元引用正确,是Seize时存储到agent自定义变量中的资源对象,而非空值或其他资源的引用
- 确认Release块设置的释放数量与agent实际持有的motrice资源数量匹配,如果你需要释放全部同类型资源可以直接选释放所有同类型,不用指定数量
- 如果你的Seize块是将motrice和其他两个资源绑定为一个资源组合占用,确认没有勾选资源组的「必须同时释放」选项,勾选后无法单独释放组合内的单个资源。
- 在
Release1块的「On enter action」中加入日志代码traceln(agent.getResourcesOwnedByType(motrice).size());,运行模型查看日志输出:- 如果没有日志输出,说明agent根本没有进入Release1块,需要检查上游流程的分支逻辑是否正确
- 如果日志输出的持有数量为0,说明motrice资源在进入Release1之前就已经被释放,需要检查之前的模块是否有误释放逻辑
- 如果日志输出有值,走完Release1后再在「On exit action」中加日志打印持有数量,如果还是有值,回到资源配置环节重新核对参数即可。
内容的提问来源于stack exchange,提问作者Luigi Aurilio
相关产品推荐
相关产品推荐

