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

GitHub Actions Ubuntu环境运行go test出现too many open files错误

问题根因

你遇到的too many open files报错是Linux系统单进程文件描述符(FD)上限限制触发的,和两个特性相关:

  • Linux默认的单进程最大FD上限通常为1024,远低于Windows系统的默认上限,因此Windows环境运行不会触发该问题
  • Go测试默认会并行执行同包内的测试用例,如果你的测试用例存在打开文件、建立网络连接、初始化数据库连接等需要占用FD的操作,并行执行时累计占用的FD会随着用例数量上涨,超过上限就会抛出错误,注释一半用例后总占用FD低于阈值自然恢复正常

解决方法

前置验证步骤

先确认是FD上限导致的问题:

  • 本地Ubuntu终端执行 ulimit -n 查看当前上限,默认输出一般为1024
  • 执行 ulimit -n 65535 临时调高当前shell的FD上限后重新跑测试,如果不再报错即可确认根因
  • GitHub Actions环境可在测试执行步骤前添加 sudo ulimit -n 65535 临时调高上限验证

永久修复方案

优先采用代码侧优化,不需要修改系统配置:

  • 修复测试资源泄漏:检查所有测试用例中的文件、网络连接、数据库连接等资源,确保打开后通过defer语句调用Close()方法主动释放,避免FD长期被无用资源占用
  • 复用公共测试资源:将可全局复用的资源(如测试配置文件、公共数据库连接池)提取到TestMain函数中统一初始化,所有测试用例共用一份资源,全部测试执行完成后再统一释放,避免每个用例重复初始化占用额外FD
  • 调整测试并行度:执行测试时添加-parallel N参数限制最大并行测试数,降低并发占用的FD总量,例如go test -parallel 8 ./src/interface/service/user,也可添加-p 1参数强制串行执行测试

如果需要从系统层面彻底解决:

  • 本地Ubuntu永久调高FD上限:编辑/etc/security/limits.conf文件,添加如下两行配置后重启系统生效:
    * soft nofile 65535
    * hard nofile 65535
    
  • GitHub Actions环境直接在测试执行的步骤前添加sudo ulimit -n 65535即可,不需要永久修改环境配置

内容的提问来源于stack exchange,提问作者Heikkisorsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:03