You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Sail(Docker)测试报错Resource deadlock avoided的成因咨询

错误分析:Laravel Sail运行sail artisan test时出现errno=35资源死锁避免

错误含义

errno=35对应系统层面的"Resource deadlock avoided"(资源死锁避免),本质是PHP进程尝试读取文件时,操作系统检测到潜在死锁风险,主动终止了这次读取操作,你的场景里是require_once加载文件时触发的异常。

常见成因

  • Docker挂载文件冲突:Laravel Sail将本地目录挂载到容器内,宿主机和容器同时对同一文件(如vendor框架文件、自动加载文件)进行读写时,易触发文件锁冲突,系统为避免死锁阻止读取。
  • 测试并发进程竞争:测试命令若启用并行执行,多个进程同时读取或修改核心文件,会引发资源竞争,触发死锁保护机制。
  • 文件系统缓存不一致:即便清理了缓存、重新生成autoload,Docker容器内的文件缓存可能和宿主机不同步,残留异常文件锁状态。
  • 底层存储驱动限制:部分Linux发行版或Docker存储驱动(如overlay2)在处理文件共享时,对并发文件访问支持有限,容易触发这类死锁保护。

排查与解决步骤

  • 禁用测试并行:在phpunit.xml中将parallel设为false,或运行测试时添加参数:sail artisan test --no-parallel,排除并发进程竞争问题。
  • 重建Sail容器:彻底清理容器状态,而非仅重启:
    sail down -v
    sail build --no-cache
    sail up -d
    
  • 检查宿主机权限:确保本地项目目录权限正确,避免容器内进程读取文件时出现隐性锁问题。
  • 容器内执行composer操作:不要在宿主机运行composer dump-autoload,进入容器执行:sail composer dump-autoload -o,保证容器内自动加载文件与环境匹配。

内容的提问来源于stack exchange,提问作者Chuck Le Butt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:52:12