--- title: "执行被取消 (execution_cancelled_exception) 错误排查与解决" date: 2026-02-18 lastmod: 2026-02-18 description: "execution_cancelled_exception 表示执行中的操作被主动取消,通常由用户手动取消、节点关闭、超时或资源限制引起。" tags: ["任务管理", "超时", "资源限制"] summary: "为什么这个错误发生 # execution_cancelled_exception 是在执行中的操作被主动取消时抛出的错误。 Easysearch 中的某些长时间运行的操作(如数据恢复、快照创建、批量操作等)是可取消的。当这些操作被系统或用户主动中断时,就会抛出此异常。 这个错误可能由以下原因引起: 用户手动取消:通过 API 手动取消正在执行的任务 节点关闭:节点正在关闭过程中,正在执行的操作被取消 超时取消:操作执行时间超过预设的超时时间而被自动取消 主节点变更:集群主节点变更导致某些需要主节点协调的操作被取消 分片迁移:分片迁移导致相关操作被取消 任务冲突:新的操作请求导致现有操作被取消(如同一索引的并发快照) 资源限制:系统资源不足导致操作被强制取消 状态变更:索引或集群状态变更导致正在进行的操作无效而被取消 如何修复这个错误 # 1. 确认取消是否为预期行为 # 检查是否有人为干预(如手动删除任务、关闭节点等) 查看操作日志确认取消的具体原因 2. 检查节点状态 # # 检查节点是否正常运行 GET /_cat/nodes?v # 检查集群健康状态 GET /_cluster/health 3. 查看任务状态 # # 查看当前正在执行的任务 GET /_tasks?detailed=true&actions=**&parent_task_id= # 查看特定任务 GET /_tasks/<task_id> 4. 增加超时时间 # 如果操作因为超时而被取消,可以增加超时时间: # 例如,在快照 API 中设置超时 PUT /_snapshot/<repository>/<snapshot-name>?wait_for_completion=true&timeout=10m 5. 重试操作 # 如果取消是由于临时性问题(如网络波动、资源暂时紧张),可以重试操作:" --- ## 为什么这个错误发生 `execution_cancelled_exception` 是在执行中的操作被主动取消时抛出的错误。 Easysearch 中的某些长时间运行的操作(如数据恢复、快照创建、批量操作等)是可取消的。当这些操作被系统或用户主动中断时,就会抛出此异常。 这个错误可能由以下原因引起: 1. **用户手动取消**:通过 API 手动取消正在执行的任务 2. **节点关闭**:节点正在关闭过程中,正在执行的操作被取消 3. **超时取消**:操作执行时间超过预设的超时时间而被自动取消 4. **主节点变更**:集群主节点变更导致某些需要主节点协调的操作被取消 5. **分片迁移**:分片迁移导致相关操作被取消 6. **任务冲突**:新的操作请求导致现有操作被取消(如同一索引的并发快照) 7. **资源限制**:系统资源不足导致操作被强制取消 8. **状态变更**:索引或集群状态变更导致正在进行的操作无效而被取消 ## 如何修复这个错误 ### 1. 确认取消是否为预期行为 - 检查是否有人为干预(如手动删除任务、关闭节点等) - 查看操作日志确认取消的具体原因 ### 2. 检查节点状态 ```bash # 检查节点是否正常运行 GET /_cat/nodes?v # 检查集群健康状态 GET /_cluster/health ``` ### 3. 查看任务状态 ```bash # 查看当前正在执行的任务 GET /_tasks?detailed=true&actions=**&parent_task_id= # 查看特定任务 GET /_tasks/ ``` ### 4. 增加超时时间 如果操作因为超时而被取消,可以增加超时时间: ```bash # 例如,在快照 API 中设置超时 PUT /_snapshot//?wait_for_completion=true&timeout=10m ``` ### 5. 重试操作 如果取消是由于临时性问题(如网络波动、资源暂时紧张),可以重试操作: ```bash # 例如,重新创建快照 PUT /_snapshot// { "indices": "", "wait_for_completion": true } ``` ### 6. 检查集群资源 ```bash # 检查线程池状态 GET /_cat/thread_pool?v # 检查 JVM 内存使用 GET /_nodes/stats/jvm # 检查磁盘使用情况 GET /_cat/allocation?v ``` ### 7. 处理并发冲突 如果多个操作同时进行导致冲突,可以: - 等待当前操作完成后再执行下一个 - 使用任务管理 API 取消不需要的任务 ### 8. 调整操作参数 某些操作可以通过调整参数来避免被取消: - 减小批量大小 - 减少并发操作数量 - 在非高峰时段执行大型操作 ### 9. 查看详细日志 ```bash # 检查节点日志以了解取消的具体原因 tail -f /path/to/easysearch/logs/easysearch.log | grep -i "cancelled" ``` ### 10. 任务管理 ```bash # 如果需要,可以取消特定任务 POST /_tasks//_cancel # 或者按条件取消任务 POST /_tasks/_cancel?actions=*snapshot*&actions=*recovery* ``` ### 预防措施 - 为长时间运行的操作设置合理的超时时间 - 在执行大型操作前,确保集群有充足的资源 - 避免在高峰时段执行大规模操作 - 使用任务 API 监控正在执行的任务状态 - 对于关键操作,考虑实现客户端重试机制 - 确保网络稳定,避免因网络问题导致操作被取消