Jenkins构建出现“Too many open files”异常,本地Maven构建正常
解决Jenkins构建Maven时"Too many open files"错误的方案
这个错误的核心原因是Jenkins进程运行时打开的文件描述符数量超出了系统给它设定的限制——命令行用户的文件描述符限制通常比Jenkins服务用户宽松,所以本地构建能成功。以下是具体解决步骤:
1. 确认当前限制
切换到Jenkins用户,查看当前的文件描述符软/硬限制:
su - jenkins -c "ulimit -n" # 查看软限制 su - jenkins -c "ulimit -Hn" # 查看硬限制
2. 临时调整(重启后失效)
如果需要快速验证,可以临时提升Jenkins用户的文件描述符限制,再重启Jenkins:
su - jenkins -c "ulimit -n 65536" systemctl restart jenkins
3. 永久提升限制
系统用户级配置
编辑/etc/security/limits.conf,添加以下配置(数值可根据实际情况调整,65536是常用的合理值):
jenkins soft nofile 65536 jenkins hard nofile 65536
Systemd服务配置(若Jenkins用systemd管理)
创建或编辑/etc/systemd/system/jenkins.service.d/override.conf文件:
[Service] LimitNOFILE=65536
执行以下命令生效并重启Jenkins:
systemctl daemon-reload systemctl restart jenkins
4. 优化Maven编译配置
启用编译进程fork
在项目的pom.xml中修改maven-compiler-plugin配置,启用fork模式让编译在独立进程中进行,避免单个进程打开过多文件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <!-- 建议使用最新稳定版 --> <configuration> <fork>true</fork> <meminitial>512m</meminitial> <maxmem>1024m</maxmem> </configuration> </plugin>
禁用createdFiles.lst生成
如果不需要追踪编译生成的文件,可以直接关闭这个功能,避免生成该文件时触发限制:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <createdFiles>false</createdFiles> </configuration> </plugin>
5. 检查Jenkins JVM配置
编辑Jenkins的JVM参数配置文件(通常是/etc/default/jenkins),在JAVA_ARGS中添加参数避免JVM限制文件描述符:
JAVA_ARGS="$JAVA_ARGS -XX:-MaxFDLimit"
修改后重启Jenkins生效。
内容的提问来源于stack exchange,提问作者Ashmita Kanojia
相关产品推荐
相关产品推荐

