我们最近进行了詹金斯重做。我们决定在服务器上的Docker容器中安装新版本。
在迁移时,我注意到詹金斯在容器中时要比在服务器上运行时慢得多。
这是一个主要问题,可能会干扰我们的迁移。
我试图寻找在没有太大帮助的情况下将更多资源提供给容器的方法。
如何加快jenkins容器的速度/在服务器上为其提供所需的所有资源(服务器仅专用于jenkins)。
此外,当我也想启动从属容器时,如何分配这些资源?
答案 0 :(得分:1)
使用Docker可能会变慢的一件事是,当容器中运行的进程对容器文件系统进行大量I / O调用时。容器文件系统是 union文件系统,它没有针对速度进行优化。
这是docker volumes有用的地方。除了在文件系统上提供一个可以删除容器的位置之外,docker卷上的磁盘性能还不错。
Jenkins Docker image将JENKINS_HOME
位置定义为docker卷,因此只要您的Jenkins作业在该位置进行磁盘操作,就可以了。
如果您确定该卷上的磁盘访问仍然太慢,则可以自定义该卷在Docker主机上的安装位置,以便最终将其安装在诸如SSD之类的快速驱动器上。
另一个技巧是使用tmpfs将docker卷安装到RAM。请注意,这样的卷不能提供持久性,并且当容器停止或删除时,该位置上的数据将丢失。
由于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>
进行检查。