容器中的Jenkins比服务器本身慢得多

时间:2019-03-06 09:44:56

标签: docker jenkins

我们最近进行了詹金斯重做。我们决定在服务器上的Docker容器中安装新版本。

在迁移时,我注意到詹金斯在容器中时要比在服务器上运行时慢得多。

这是一个主要问题,可能会干扰我们的迁移。

我试图寻找在没有太大帮助的情况下将更多资源提供给容器的方法。

如何加快jenkins容器的速度/在服务器上为其提供所需的所有资源(服务器仅专用于jenkins)。

此外,当我也想启动从属容器时,如何分配这些资源?

1 个答案:

答案 0 :(得分:1)

磁盘操作

使用Docker可能会变慢的一件事是,当容器中运行的进程对容器文件系统进行大量I / O调用时。容器文件系统是 union文件系统,它没有针对速度进行优化。

这是docker volumes有用的地方。除了在文件系统上提供一个可以删除容器的位置之外,docker卷上的磁盘性能还不错。

Jenkins Docker imageJENKINS_HOME位置定义为docker卷,因此只要您的Jenkins作业在该位置进行磁盘操作,就可以了。

如果您确定该卷上的磁盘访问仍然太慢,则可以自定义该卷在Docker主机上的安装位置,以便最终将其安装在诸如SSD之类的快速驱动器上。

另一个技巧是使用tmpfs将docker卷安装到RAM。请注意,这样的卷不能提供持久性,并且当容器停止或删除时,该位置上的数据将丢失。


JVM内存耗尽/垃圾收集器

由于Jenkins是Java应用程序,因此会想到另一个潜在的问题:内存耗尽。如果运行Jenkins进程的JVM的内存太有限,则Java垃圾收集器将运行得太频繁。您可以看到,当您意识到Java应用程序使用了过多的CPU(垃圾收集器使用了CPU)时。如果是这种情况,请为JVM提供更多内存:

docker run-p 8080:8080 -p 50000:50000 --env JAVA_OPTS="-Xmx2048m -Djava.awt.headless=true" jenkins/jenkins:lts

网络

Docker容器具有虚拟网络堆栈和自定义网络设置。您还想确保所有与网络相关的操作都很快。

DNS服务器可能是一个问题,请通过从Jenkins容器执行ping <some domain name>进行检查。