Linux 上的 Oracle Service Bus maven 构建时间比 Windows 上慢 30 倍
Oracle Service Bus maven build time 30 times slower on Linux than on Windows
我目前有一个包含 21 个模块的 OSB 项目,在我的本地 2 core/12GB ram 笔记本电脑 运行 Windows 上构建大约需要 4 分钟,不使用线程,只是一个简单的构建安装。每个模块需要 10-20 秒。
在我的 CI 服务器 运行 和 Ubuntu 上构建完全相同的项目时,使用 8 cores/16GB RAM 构建时间接近 110 分钟,使用大约 4每个模块分钟。
Linux 构建的一些细节:
- 每个模块这 4 分钟中的大部分时间都闲置在 0% CPU 利用率上。
- MAVEN_OPTS 是“-Xmx512m -Xms512m”
- Java 7 和 8
的构建时间相同
- 当 运行 -X 标志时,它大部分时间都花在“--结束配置--”
我曾尝试增加文件描述符限制,认为这是问题所在。这对构建时间没有任何影响。
这里有很多变数。我无法提供答案,但总的来说,我会尽量减少问题。你是说大约有 21 个项目。它和 1 一样慢吗?我知道你说你用 4min/module 得到它,但这与其中有 1 个模块的项目不同。文件描述符 (ulimit
) 的绝对范围确实很麻烦,即使您在构建期间一次只查看一个模块。
其次,确保您自己的笔记本电脑的环境变量相似。 Windows 到 Linux 并不是最容易比较的,但是您应该能够确定 JAVA_OPTS
、MAVEN_OPTS
、各种 -X
/-D
flags是否相同,-Xms/-Xmx
是否设置相同等等等等
此外,您是否查看了我找到的任何 Google-able 结果?
- Why is my Maven so slow on Ubuntu?
- http://zeroturnaround.com/rebellabs/your-maven-build-is-slow-speed-it-up/
你的问题的难点在于我们甚至没有考虑遥远的近距离环境。我们不知道
- 环境变量
settings.xml
(和/etc/.../.settings.xml
)
- CI 服务器软件 运行 是构建还是您只是 运行 在本地计算机和远程计算机上
mvn clean install
相同?
- 等等等
而且我不能说这个网站甚至是让人排查问题的最佳场所。如果您正在构建一组 OSB 项目,您可能会更幸运地向 Oracle Support 提交 SR 并请求他们根据您的支持计划帮助您。至少在 SR 中,通信中有更多的来回。在这里,你需要提供所有可能的信息,然后人们会把答案吐给你。没有关于你的问题的任何数据,我们无处可去,并且疯狂assumptions/guesses。
在 Windows 和 Linux 上使用 VisualVM 分析 Maven 后,我发现在 Linux 上它花费了异常多的时间来生成随机种子。
因此,通过更改为(稍微不太安全)/dev/./urandom
,构建时间从 110 分钟减少到 1 分钟 47 秒。
如何执行此操作的一个示例是将设置作为标志传递:
-Djava.security.egd=file:/dev/./urandom
如果您想永久设置它,可以在文件 jdk1.7.0_75/jre/lib/security/java.security
中通过更改以下内容来完成:
securerandom.source=file:/dev/urandom
至
securerandom.source=file:/dev/./urandom
。
这可能会带来一些安全隐患,如果您需要这样做,您应该先进行一些研究。
我目前有一个包含 21 个模块的 OSB 项目,在我的本地 2 core/12GB ram 笔记本电脑 运行 Windows 上构建大约需要 4 分钟,不使用线程,只是一个简单的构建安装。每个模块需要 10-20 秒。
在我的 CI 服务器 运行 和 Ubuntu 上构建完全相同的项目时,使用 8 cores/16GB RAM 构建时间接近 110 分钟,使用大约 4每个模块分钟。
Linux 构建的一些细节:
- 每个模块这 4 分钟中的大部分时间都闲置在 0% CPU 利用率上。
- MAVEN_OPTS 是“-Xmx512m -Xms512m”
- Java 7 和 8 的构建时间相同
- 当 运行 -X 标志时,它大部分时间都花在“--结束配置--”
我曾尝试增加文件描述符限制,认为这是问题所在。这对构建时间没有任何影响。
这里有很多变数。我无法提供答案,但总的来说,我会尽量减少问题。你是说大约有 21 个项目。它和 1 一样慢吗?我知道你说你用 4min/module 得到它,但这与其中有 1 个模块的项目不同。文件描述符 (ulimit
) 的绝对范围确实很麻烦,即使您在构建期间一次只查看一个模块。
其次,确保您自己的笔记本电脑的环境变量相似。 Windows 到 Linux 并不是最容易比较的,但是您应该能够确定 JAVA_OPTS
、MAVEN_OPTS
、各种 -X
/-D
flags是否相同,-Xms/-Xmx
是否设置相同等等等等
此外,您是否查看了我找到的任何 Google-able 结果?
- Why is my Maven so slow on Ubuntu?
- http://zeroturnaround.com/rebellabs/your-maven-build-is-slow-speed-it-up/
你的问题的难点在于我们甚至没有考虑遥远的近距离环境。我们不知道
- 环境变量
settings.xml
(和/etc/.../.settings.xml
)- CI 服务器软件 运行 是构建还是您只是 运行 在本地计算机和远程计算机上
mvn clean install
相同? - 等等等
而且我不能说这个网站甚至是让人排查问题的最佳场所。如果您正在构建一组 OSB 项目,您可能会更幸运地向 Oracle Support 提交 SR 并请求他们根据您的支持计划帮助您。至少在 SR 中,通信中有更多的来回。在这里,你需要提供所有可能的信息,然后人们会把答案吐给你。没有关于你的问题的任何数据,我们无处可去,并且疯狂assumptions/guesses。
在 Windows 和 Linux 上使用 VisualVM 分析 Maven 后,我发现在 Linux 上它花费了异常多的时间来生成随机种子。
因此,通过更改为(稍微不太安全)/dev/./urandom
,构建时间从 110 分钟减少到 1 分钟 47 秒。
如何执行此操作的一个示例是将设置作为标志传递:
-Djava.security.egd=file:/dev/./urandom
如果您想永久设置它,可以在文件 jdk1.7.0_75/jre/lib/security/java.security
中通过更改以下内容来完成:
securerandom.source=file:/dev/urandom
至
securerandom.source=file:/dev/./urandom
。
这可能会带来一些安全隐患,如果您需要这样做,您应该先进行一些研究。