慢速Jenkins故障排除

Jos*_*ley 6 jenkins jenkins-plugins

查看作业页面时Jenkins 非常慢(超过3分钟,使用冷磁盘缓存).主页显示正常; 问题仅在查看单个作业的页面时.

认为问题始于Jenkins +插件的最新更新,但我该如何解决这样的问题呢?

我该如何解决这样的问题?

Jos*_*ley 8

重现问题

首先,确保您可以重现问题.它有助于测试.如果仅在缓存冷却时出现性能问题,则清除磁盘缓存(Linux的说明)可能会有所帮助.

禁用或降级插件

Jenkins的"管理插件"(在Manage Jenkins部分下)允许您单独禁用和降级插件.如果您怀疑特定插件导致问题,这可以帮助您确认.

使用strace

strace可以显示Jenkins正在进行的系统调用.首先,获取主要的Jenkins PID:

root@server:~# ps -ef | grep jenkins
jenkins    589     1  0 17:03 ?        00:00:00 /usr/bin/daemon --name=jenkins --inherit --env=JENKINS_HOME=/home/jenkins --output=/var/log/jenkins/jenkins.log --pidfile=/var/run/jenkins/jenkins.pid --umask=027 -- /usr/bin/java -Djava.awt.headless=true -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=-1
jenkins    591   589  7 17:03 ?        00:00:51 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=-1
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,pid是591.)

接下来,运行strace.由于Jenkins是多线程的,因此您需要添加-f以跟踪所有线程.

strace -p 591 -f
Run Code Online (Sandbox Code Playgroud)

如果你很幸运,你会发现一个明显的减速原因.(就我而言,其中一个主题是build.xml为我正在尝试查看的特定工作重复打开每个以前的构建.)

使用jstack

strace监控系统调用,并告诉你什么进程所做的事.jstack显示进程的调用堆栈,它有助于告诉您它为什么要这样做(它正在尝试完成它).

jstack需要一个pid,需要以与您正在检查的进程相同的用户身份运行.(有关详细信息,请参见此处.)

sudo -u jenkins jstack 591
Run Code Online (Sandbox Code Playgroud)

这显示了很多信息:每个Jenkins线程的堆栈跟踪,库和框架代码的大量条目,例如请求处理程序和XML等.但是,在那里,你应该能够找到堆栈跟踪特定的请求处理程序运行缓慢,并且堆栈跟踪的某些部分指示它正在尝试执行的操作.