我在jenkins build中遇到了一个问题,当jenkins试图构建junit测试时,我得到了一个maven编译器错误。
当我从命令行运行相同的代码时,构建成功。
maven-compiler-plugin/compile/default-compile/createdFiles.lst: Too many open files
06:26:49 at sun.nio.fs.UnixException.translateToIOException (UnixException.java:91)
06:26:49 at sun.nio.fs.UnixException.rethrowAsIOException (UnixException.java:102)
06:26:49 at sun.nio.fs.UnixException.rethrowAsIOException (UnixException.java:107)
06:26:49 at sun.nio.fs.UnixFileSystemProvider.newByteChannel (UnixFileSystemProvider.java:214)
06:26:49 at java.nio.file.spi.FileSystemProvider.newOutputStream (FileSystemProvider.java:434)
06:26:49 at java.nio.file.Files.newOutputStream (Files.java:216)
06:26:49 at java.nio.file.Files.newBufferedWriter (Files.java:2860)
06:26:49 at org.apache.maven.shared.utils.io.FileUtils.fileWriteArray (FileUtils.java:456)
06:26:49 at org.apache.maven.shared.utils.io.FileUtils.fileWriteArray (FileUtils.java:437)
有人能帮忙吗?
1条答案
按热度按时间toiithl61#
Jenkins构建日志中显示的Java IOException "Too many open files"是由Maven构建管理器引起的。
在构建系统中,违反系统限制¹的情况并不少见,特别是当远程机器上的构建和工作负载首次看到较重的构建时。您的Jenkins设置可能就是这种情况。
然而,当您在命令行上调用构建管理器时,您没有达到该限制,但没有共享它不在同一台机器上,这是一种推测,所以对最后一句话持保留态度。
正常的过程是提交一个关于打开文件/文件描述符/文件句柄的限制的更改(请求)(对于构建用户Maven,因为构建管理器是在其下执行的,a.k.a. * “ulimit”*)。
如果它是一个自我管理的系统,请查阅包含该系统的操作手册,并检查这些设置是否已在配置中(我在下面列出了更多资源)。如果是这样,您应该能够根据操作说明和相关手册直接提交变更。
¹
limits.conf(5)
、sysconf(8)
、dockerd(8)
、systemd.exec(5)
其他资源
这都是关于 ulimit 的,但是今天的系统配置有很大的不同,而且管理服务经常消失。一些指针和Q&A资源,以便您可以开始构建自己的知识库(这是所有Linux):
引用自
$ bash -c 'help ulimit'
:shell上的
ulimit
命令可以用来测试和尝试一些东西,例如:与您的 shell 和远程系统进行比较,将您的 shell 限制为远程的设置并尝试复制等。dockerd(8)
:这里不太关心Docker,这仅仅是一个提醒,如果你有Jenkins / Maven运行dockerized,你可能会发现更多的地方以及如何配置 ulimits(最后一个摘录只指向其中的一个 *)。
这同样适用于带有 systemd 的系统,特别是
systemd.exec(5)
,摘录:并与 * 分辨率 * 部分B进行比较。Ulimit设置[仅适用于Linux操作系统]在Cloudbees的 Prepare Jenkins for Support 文章中获取更多信息。