AWX迁移后无法清理作业历史:Killed报错(退出码137)求助
排查与解决AWX作业清理失败问题
一、排查退出码137(Killed)错误
退出码137的核心原因是进程被系统OOM Killer强制终止,通常由内存不足导致,可按以下步骤排查:
检查AWX Task Pod的资源限制与实际使用
- 查看Task Pod的资源配置:
kubectl describe pod <awx-task-pod-name> | grep -A 10 Resources - 实时监控Pod内存占用:
kubectl top pod <awx-task-pod-name>
如果内存使用接近或超过配置的
limits.memory,说明资源不足导致OOM。- 查看Task Pod的资源配置:
调整清理策略,减少单次处理数据量
- 避免一次性清理所有历史记录,拆分时间范围分批执行,比如先清理15-10天前的记录:
awx-manage cleanup_jobs --days 15 awx-manage cleanup_jobs --days 10 - 若支持(AWX 2.x版本通常支持),添加
--batch-size参数限制单次处理的记录数:awx-manage cleanup_jobs --days 10 --batch-size 500
- 避免一次性清理所有历史记录,拆分时间范围分批执行,比如先清理15-10天前的记录:
临时提升Task Pod内存配额
修改AWX自定义资源(CR)的spec.task.resources部分,调高内存限制后重新部署:spec: task: resources: limits: memory: 8Gi # 根据实际情况调整 requests: memory: 4Gi应用修改后重新执行清理命令。
二、直接从PostgreSQL清理损坏/历史作业记录
若awx-manage工具无法正常工作,可直接操作数据库清理,操作前务必完整备份数据库:
进入PostgreSQL容器
kubectl exec -it <awx-postgres-pod-name> -- psql -U awx awx分步删除关联表记录(避免外键约束错误)
AWX 2.5.0的作业相关表以main_为前缀,按以下顺序删除:- 删除作业事件记录:
-- 分批删除,每次处理1000条,重复执行直至无记录 DELETE FROM main_jobevent WHERE job_id IN (SELECT id FROM main_job WHERE created < NOW() - INTERVAL '10 days') LIMIT 1000; - 删除作业主机摘要:
DELETE FROM main_jobhostsummary WHERE job_id IN (SELECT id FROM main_job WHERE created < NOW() - INTERVAL '10 days') LIMIT 1000; - 删除作业标准输出:
DELETE FROM main_jobstdout WHERE job_id IN (SELECT id FROM main_job WHERE created < NOW() - INTERVAL '10 days') LIMIT 1000; - 删除作业通知记录:
DELETE FROM main_jobnotification WHERE job_id IN (SELECT id FROM main_job WHERE created < NOW() - INTERVAL '10 days') LIMIT 1000; - 最后删除作业主记录:
DELETE FROM main_job WHERE created < NOW() - INTERVAL '10 days' LIMIT 1000;
- 删除作业事件记录:
验证清理结果
查询剩余的历史作业记录,确认清理生效:SELECT COUNT(*) FROM main_job WHERE created < NOW() - INTERVAL '10 days';
三、排查UI删除作业返回500错误
查看AWX Task Pod的日志,定位具体错误原因:
kubectl logs <awx-task-pod-name> -f
常见原因包括:
- 迁移后数据库表结构不兼容(新旧AWX版本表字段差异)
- 作业记录关联的子表数据缺失(如stdout记录丢失,导致删除时触发数据库错误)
- 数据库权限或约束异常
根据日志中的具体错误信息,针对性修复数据或调整表结构。
内容的提问来源于stack exchange,提问作者rippie
相关产品推荐
相关产品推荐

