环境信息
- 部署方式:MobileWorld 容器化部署
- 核心依赖:Android Emulator(QEMU/KVM 虚拟化)
- 场景:批量任务评测,每个任务前均通过
load_snapshot 重置模拟器状态
问题描述
在容器中批量运行评测任务时,模拟器会在跑至约64个任务后崩溃,后续所有任务初始化均失败,报错如下:
RuntimeError: Failed to initialize task SearchItemAndCheckoutTask: 500 Server Error: Internal Server Error for url: shturl.cc/CuqQvCr4WTEUUZeiKc6cU8s
关键现象与根因分析
-
状态污染触发崩溃
- 多次调用
load_snapshot 后,模拟器 GPU colorbuffer 状态出现不一致
- 触发 KVM
slot File exists 错误,直接导致 emulator 进程意外终止
- 触发频率:跑数十个任务后必然出现
-
崩溃后无法自愈,锁资源泄漏
- 调用
start_shturl.cc/K 重启时,固定卡 600s 超时失败
- 已退出的 QEMU 僵尸进程仍持有 KVM/AVD 锁,新模拟器无法抢占资源
- 后端 worker 因同步逻辑阻塞,所有
/task/init 请求返回 500 错误
复现步骤
- 启动 MobileWorld 容器环境
- 批量执行评测任务,每个任务均通过
load_snapshot 重置模拟器
- 运行至约60-70个任务时,模拟器必崩溃
- 后续所有任务初始化请求返回 500 错误,环境彻底无法恢复
影响与尝试过的临时方案
- 影响:无法完成大规模批量评测,每次崩溃都需手动清理锁、重启容器
- 临时方案尝试:
- 延长启动超时时间:无效(锁资源未释放)
- 手动
kill -9 僵尸进程:可临时恢复,但需人工介入,无法自动化
- 减少单次任务数量:规避问题,但无法满足完整评测需求
求助与问题
- 请问是否有其他用户遇到过类似「多次快照重载导致 GPU 状态污染 + KVM 锁泄漏」的问题?
- 目前是否有已知的规避方案或修复补丁?
环境信息
load_snapshot重置模拟器状态问题描述
在容器中批量运行评测任务时,模拟器会在跑至约64个任务后崩溃,后续所有任务初始化均失败,报错如下:
RuntimeError: Failed to initialize task SearchItemAndCheckoutTask: 500 Server Error: Internal Server Error for url: shturl.cc/CuqQvCr4WTEUUZeiKc6cU8s关键现象与根因分析
状态污染触发崩溃
load_snapshot后,模拟器 GPU colorbuffer 状态出现不一致slot File exists错误,直接导致 emulator 进程意外终止崩溃后无法自愈,锁资源泄漏
start_shturl.cc/K重启时,固定卡 600s 超时失败/task/init请求返回 500 错误复现步骤
load_snapshot重置模拟器影响与尝试过的临时方案
kill -9僵尸进程:可临时恢复,但需人工介入,无法自动化求助与问题