细节
-
类型:
错误
-
状态: Closed
The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">关闭 (查看工作流) -
优先级:
主要
-
解决方法: 固定
-
组件/ s: 核心
-
标签:
-
环境:agent JDK信息:
swarm-client-3.24.jar
Openjdk version "1.8.0_282"
OpenJDK运行时环境(build 1.8.0_282-8u282-b08-0ubuntu1~16.04-b08)
OpenJDK 64位服务器虚拟机(build 25.282-b08,混合模式)
主节点JDK信息:
Openjdk version "1.8.0_282"
OpenJDK运行时环境(build 1.8.0_282-8u282-b08-0ubuntu1~18.04-b08)
OpenJDK 64位服务器虚拟机(build 25.282-b08,混合模式)
必威国际有限公司詹金斯:2.276
操作系统:Linux - 5.4.0-1036-gcp
---
ace-editor: 1.1
pipeline-rest-api: 2.19
pipeline-input-step: 2.12
dtkit-api: 3.0.0
build-name-setter:魅惑
blueocean-pipeline-editor: 1.24.4
extended-read-permission: 3.2
群:3.24
pipeline-utility-steps: 2.6.1
ldap: 2.3
jaxb: tripwire
blueocean-display-url:测试盒框
blueocean-pipeline-api-impl: 1.24.4
车把:1.1.1
trilead-api: 1.0.13
bootstrap4-api: 4.6.0-1
conditional-buildstep: 1.4.1
2.6.4 scm-api:
powershell: 1.4
pipeline-stage-view: 2.19
okhttp-api: 3.14.9
command-launcher: 1.5
aws-java-sdk: 1.11.930
blueocean-bitbucket-pipeline: 1.24.4
s3:0.11.6
blueocean-rest: 1.24.4
credentials-binding: 1.24
pipeline-graph-analysis: 1.10
lockable-resources: 2.10
postbuildscript: 2.11.0
github-branch-source: 2.10.0
build-user-vars-plugin: 1.6
cloudbees-disk-usage-simple: 0.10
blueocean-git-pipeline: 1.24.4
node-iterator-api: 1.5.0
junit-attachments: 1.6
momentjs: 1.1.1
plain-credentials: 1.7
工作流支持:3.8
workflow-aggregator: 2.6
凭证:2.3.14
workflow-cps-global-lib: 2.17
email-ext: 2.81
1.3.0 authorize-project:版本
docker-commons: 1.17
gradle: 1.36
cobertura: 1.16
blueocean-commons: 1.24.4
antisamy-markup-formatter: 2.1
最喜欢的:2.3.3
embeddable-build-status: 2.0.3
jjwt-api: 0.11.2-7.a257d5ff5a6b
jsch: 0.1.55.2
梅勒:1.32.1
pipeline-stage-tags-metadata: 1.8.1
external-monitor-job: 1.7
ssh-slaves: 1.31.5
built-on-column: 1.1
必威国际有限公司jenkins-multijob-plugin: 1.36
popper-api: 1.16.1-1
token-macro: 2.15
blueocean-github-pipeline: 1.24.4
ws-cleanup: 0.38
workflow-basic-steps: 2.23
重建:1.31
pipeline-model-definition: 1.8.1
junit: 1.48
ghprb: 1.42.1
job-dsl: 1.77
必威国际有限公司jenkins-design-language: 1.24.4
pipeline-milestone-step: 1.3.2
blueocean-rest-impl: 1.24.4
github-api: 1.122
workflow-multibranch: 2.22
pipeline-model-api: 1.8.1
allure-必威国际有限公司jenkins-plugin: 2.29.0
docker-workflow: 1.25
display-url-api: 2.3.4
git服务器:1.9
durable-task: 1.35
pipeline-build-step: 2.13
pam-auth: 1.6
vsphere-cloud: 2.25
google-storage-plugin: 1.5.3
松:2.45
google-oauth-plugin: 1.0.3
身份验证标记:1.4
snakeyaml-api: 1.27.0
resource-disposer: 0.14
工作流操作的:2.40
apache-httpcomponents-client-4-api: 4.5.13-1.0
jdk-tool: 1.4
ssh-credentials: 1.18.1
blueocean-core-js: 1.24.4
blueocean-config: 1.24.4
github-scm-trait-notification-context: 1.1
workflow-scm-step: 2.11
yaml-axis: 0.3.0
建立超时:1.20
basic-branch-build-strategies: 1.3.2
版本:1.4
pipeline-githubnotify-step: 1.0.5
envinject-api: 1.7
matrix-combinations-parameter: 1.3.1
plugin-util-api: 1.6.1
1.3.0 checks-api:版本
htmlpublisher: 1.25
generic-webhook-trigger: 1.72
blueocean-pipeline-scm-api: 1.24.4
cloudbees-folder: 6.15
blueocean-autofavorite: 4
blueocean-i18n: 1.24.4
echarts-api: 4.9.0-3
结构:1.22
指标:4.0.2.7
cloudbees-bitbucket-branch-source: 2.9.7
blueocean-web: 1.24.4
github: 1.32.0
windows-slaves: 1.7
maven插件:3.9
jackson2-api: 2.12.1
4.5.2 git:
envinject:测试盒框
handy-uri-templates-2-api: 2.1.8-1.0
matrix-project: 1.18
ssh-agent: 1.20
时间戳:1.11.8
disable-github-multibranch-status: 1.2
bouncycastle-api: 2.18
blueocean: 1.24.4
运行:1.5
blueocean-events: 1.24.4
jquery3-api: 3.5.1-2
pipeline-stage-step: 2.5
font-awesome-api: 5.15.2-1
blueocean-dashboard: 1.24.4
git-client: 3.6.0
leastload: 3.0.0
javadoc: 1.6
oauth-credentials: 0.4
workflow-api: 2.41
sse-gateway: 1.24
blueocean-jwt: 1.24.4
script-security: 1.76
github-oauth: 0.33
branch-api: 2.6.3
custom-build-properties: 1.9.1
蚂蚁:1.11
workflow-durable-task-step: 2.37
workflow-step-api: 2.23
hashicorp-vault-plugin: 3.7.0
ansicolor: 0.5.3
pipeline-github: 2.7
parameterized-trigger: 2.40
code-coverage-api: 1.3.1
copyartifact: 1.46
jquery: 1.12.4-1
密码屏蔽:3.0
blueocean-personalization: 1.24.4
普罗米修斯:2.0.9
google-metadata-plugin: 0.3.1
pipeline-model-extensions: 1.8.1
xunit: 3.0.0
workflow-cps: 2.87
pubsub-light: 1.13
matrix-auth: 2.6.5jdk运行环境(build 1.8.0_282-8u282-b08-0ubuntu1~16.04-b08) openjdk 64位服务器虚拟机(build 25.282-b08,混合模式)主节点jdk运行环境(build 1.8.0_282-8u282-b08-0ubuntu1~18.04-b08) openjdk 64位服务器虚拟机(build 25.282-b08,混合模式)Jenkins: 2.276操作系统:必威国际有限公司Linux - 5.4.0-1036-gcp ace-editor: 1.1 pipeline-rest-api: 2.19 pipeline-input-step: 2.12 dtkit-api: 3.0.0 build-name-setter: 2.1.0 blueocean-pipeline-editor: 1.24.4 extended-read-permission: 3.2群:3.24 pipeline-utility-steps: 2.6.1 ldap: 2.3 jaxb: tripwire blueocean-display-url:测试盒框blueocean-pipeline-api-impl: 1.24.4车把:1.1.1 trilead-api: 1.0.13 bootstrap4-api: 4.6.0-1 conditional-buildstep: 1.4.1 scm-api: 2.6.4 powershell: 1.4 pipeline-stage-view: 2.19 okhttp-api: 3.14.9 command-launcher: 1.5aws-java-sdk: 1.11.930 blueocean-bitbucket-pipeline: 1.24.4 s3:0.11.6 blueocean-rest: 1.24.4 credentials-binding: 1.24 pipeline-graph-analysis: 1.10 lockable-resources: 2.10 postbuildscript: 2.11.0 github-branch-source: 2.10.0 build-user-vars-plugin: 1.6 cloudbees-disk-usage-simple: 0.10 blueocean-git-pipeline: 1.24.4 node-iterator-api: 1.5.0 junit-attachments: 1.6 momentjs: 1.1.1 plain-credentials: 1.7工作流支持:3.8 workflow-aggregator: 2.6凭证:2.3.14 workflow-cps-global-lib: 2.17 email-ext: 2.81authorization -project:1.3.0 docker-commons:1.17 gradle:1.36 cobertura:1.16 bluesea -commons:1.24.4 antisam -markup-formatter:2.1 favorite:2.3.3 embedded -build-status:2.0.3 jjwt-api:0.11.2-7。a257d5ff5a6b jsch: 0.1.55.2梅勒:1.32.1 pipeline-stage-tags-metadata: 1.8.1 external-monitor-job: 1.7 ssh-slaves: 1.31.5 built-on-column: 1.1 必威国际有限公司jenkins-multijob-plugin: 1.36 popper-api: 1.16.1-1 token-macro: 2.15 blueocean-github-pipeline: 1.24.4 ws-cleanup: 0.38 workflow-basic-steps: 2.23重建:1.31 pipeline-model-definition: 1.8.1 junit: 1.48 ghprb: 1.42.1 job-dsl: 1.77 jenkins-design-language: 1.24.4 pipeline-milestone-step: 1.3.2 blueocean-rest-impl: 1.24.4 github-api: 1.122 workflow-multibranch: 2.22pipeline-model-api: 1.8.1 allure必威国际有限公司-jenkins-plugin: 2.29.0 docker-workflow: 1.25 display-url-api: 2.3.4 git服务器:1.9 durable-task: 1.35 pipeline-build-step: 2.13 pam-auth: 1.6 vsphere-cloud: 2.25 google-storage-plugin: 1.5.3松弛更正:2.45 google-oauth-plugin: 1.0.3身份验证标记:1.4 snakeyaml-api: 1.27.0 resource-disposer: 0.14工作流操作的:2.40 apache-httpcomponents-client-4-api: 4.5.13-1.0 jdk-tool: 1.4 ssh-credentials: 1.18.1 blueocean-core-js: 1.24.4 blueocean-config: 1.24.4github-scm-trait-notification-context: 1.1 workflow-scm-step: 2.11 yaml-axis: 0.3.0建立超时:1.20 basic-branch-build-strategies: 1.3.2变体:1.4 pipeline-githubnotify-step: 1.0.5 envinject-api: 1.7 matrix-combinations-parameter: 1.3.1 plugin-util-api: 1.6.1 checks-api: 1.3.0 htmlpublisher: 1.25 generic-webhook-trigger: 1.72 blueocean-pipeline-scm-api: 1.24.4 cloudbees-folder: 6.15 blueocean-autofavorite: 1.2.4 blueocean-i18n: 1.24.4 echarts-api: 4.9.0-3结构:1.22指标:4.0.2.7cloudbees-bitbucket-branch-source: 2.9.7 blueocean-web: 1.24.4 github: 1.32.0 windows-slaves: 1.7 maven插件:3.9 jackson2-api: 2.12.1 git: 4.5.2 envinject:测试盒框handy-uri-templates-2-api: 2.1.8-1.0 matrix-project: 1.18 ssh-agent: 1.20时间戳:1.11.8 disable-github-multibranch-status: 1.2 bouncycastle-api: 2.18 blueocean: 1.24.4运行:1.5 blueocean-events: 1.24.4 jquery3-api: 3.5.1-2 pipeline-stage-step: 2.5 font-awesome-api: 5.15.2-1 blueocean-dashboard: 1.24.4 git-client: 3.6.0 leastload: 3.0.0javadoc: 1.6 oauth-credentials: 0.4 workflow-api: 2.41 sse-gateway: 1.24 blueocean-jwt: 1.24.4 script-security: 1.76 github-oauth: 0.33 branch-api: 2.6.3 custom-build-properties: 1.9.1 ant: 1.11 workflow-durable-task-step: 2.37 workflow-step-api: 2.23 hashicorp-vault-plugin: 3.7.0 ansicolor: 0.5.3 pipeline-github: 2.7 parameterized-trigger: 2.40 code-coverage-api: 1.3.1 copyartifact: 1.46 jquery: 1.12.4-1密码屏蔽:3.0 blueocean-personalization: 1.24.4普罗米修斯:2.0.9 google-metadata-plugin: 0.3.1Pipeline-model-extensions:1.8.1 xunit:3.0.0 workflow-cps:2.87 pubsub-light:1.13 matrix-auth:2.6.5
-
类似的问题:
-
发布:2.288 - 2021年4月13日,2.289 - 2021年4月20日
描述
我们一直在试图追踪一些关于队列锁定的问题
对Jenkins集群的争夺。必威国际有限公司锁争用表现在
UI不稳定/缓慢和REST API调用失败,添加,更新或
删除节点。我们在主端和客户端(版本)上使用Swarm插件
3.24)在代理程序上连接到主程序。REST API失败不是原因
对于Jenkins的异常,但是对于超出必威国际有限公司配置的API调用
proxy_read_timeout (180s)用于Jenkins前面的nginx实例。必威国际有限公司
这体现在接收504的代理的群集客户端进程上
nginx,因为Jenk必威国际有限公司ins没有及时回复。
在不稳定期间收集的线程转储显示有数百个
线程正在等待Queue锁能够添加、更新或删除
一个节点。
"处理POST /plugin/swarm/createSlave from 10.224.1.234: Jetty (winstone)-1218487" #1218487 prio=5 os_prio=0 tid=0x00007f4732c7f800 nid=0x2f96 waiting on condition [0x00007f3c6b5f2000] java.lang.Thread.State: waiting (parking) at sun.misc.Unsafe。park(本机方法)-停车等待<0x00007f3f117ca288> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870) atjava.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199) at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209) at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285) at hudsonmodel . queue . _withlock (Queue.java:1441) [snip.]
绝大多数情况下,线程在每次执行时都持有Queue锁
线程转储在Jenkins中执行操作。必威国际有限公司trimLabels方法为
添加、更新或删除节点的一部分。
"处理POST /plugin/swarm/createSlave from 10.240.81.215: Jetty (winstone)-1218362" #1218362 prio=5 os_prio=0 tid=0x00007f47265fd000 nid=0x2e11 runnable [0x00007f3c85ceb000] java.lang.Thread.State:可运行在hudson.util.QuotedStringTokenizer.hasMoreTokens (QuotedStringTokenizer.java: 184) hudson.model.Label.parse (Label.java: 585) hudson.model.Node.getAssignedLabels (Node.java: 303) hudson.model.Label.matches (Label.java: 196) hudson.model.Label.getNodes (Label.java: 233) hudson.model.Label.isEmpty (Label.java: 430) jenkins.model.必威国际有限公司Jenkins.trimLabels (Jenkins.java: 2201) jenkins.model.Nodes调用(jenkins.model.Nodes Nodes.java: 214) 4.美元4.美元(Nodes.java: 210)hudson.model.Queue._withLock (Queue.java: 1443) hudson.model.Queue.withLock (Queue.java: 1304) je必威国际有限公司nkins.model.Nodes.updateNode (Nodes.java: 210) jenkins.model.Jenkins.updateNode (Jenkins.java: 2176) hudson.model.Node.save (Node.java: 139) hudson.model.Node.setTemporaryOfflineCause (Node.java: 274) hudson.model.Computer.setNode (Computer.java: 820) hudson.slaves.SlaveComputer.setNode (SlaveComputer.java: 895) hudson.model.AbstractCIBase.updateComputer (AbstractCIBase.java: 137)hudson.model.AbstractCIBase.access$000(AbstractCIBase.java:43) at hudson.model.AbstractCIBase. java:223) at hudson.model.Queue.withLock(Queue.java: 1384) at hudson.model.Queue.withLock(Queue.java:1261) at hudson.model.AbstractCIBase. updatecomputerlist (AbstractCIBase.java:206) at jenkins.model.Jenk必威国际有限公司ins.updateComputerList(Jenkins.java:1632) at jenkins.model. queue . _withlock (Queue.java:1384) at hudson.model.AbstractCIBase. updatecomputerlist (Jenkins.java:1632) at jenkins.model. model. queue . _withlock (Queue.java:1384) athudson.model.Queue.withLock(Queue.java:1261) at 必威国际有限公司jenkins.model.Nodes.addNode(Nodes.java:147) at jenkins.model.Jenkins.addNode(Jenkins.java:2155) at hudson.plugins.swarm.PluginImpl.doCreateSlave(PluginImpl.java:224)
属性创建的两个存档文件collectPerformanceData
包含相关线程转储的脚本。
在前面提到的不稳定时期有1500-1600年
唯一的标签和400-500个工作人员,从脚本控制台收集使用
必威国际有限公司Jenkins.instance.labels.size ()而且必威国际有限公司Jenkins.instance.nodes.size ().
我可以使用Groovy脚本来复制这种越来越慢的速度
我们的工人创建步骤是什么样的。我已经附上了两个脚本。
create-workers.groovy创造工人,remove-workers.groovy删除
他们。为了使它与我们创建的群集客户端工作流相匹配SwarmSlave代理
在脚本中,但这个细节可能对复制不重要
目的。
创建和删除带有单一标签的worker非常快
期望。下面是一些用于创建的剪切输出(完整输出附在后面)create-workers-single-label.log):
...uniqueLabels: 395 nodes: 393 swarm-test-392: 63ms uniqueLabels: 396 nodes: 394 swarm-test-394: 87ms uniqueLabels: 398 nodes: 396 swarm-test-396: 62ms uniqueLabels: 399 nodes: 397 swarm-test-396: 62ms uniqueLabels: 400 nodes: 398 swarm-test-397: 62ms uniqueLabels: 401 nodes: 399 swarm-test-398: 63ms uniqueLabels: 402 nodes: 400 swarm-test-399: 63ms uniqueLabels: 403 nodes: 401 swarm-test-399: 63ms uniqueLabels: 403 nodes: 401 swarm-test-400: 64ms Total time to create 400 workers: 9183ms
然后相同的删除(完整的输出附加为remove-workers-single-label.log):
...uniqueLabels: 10 nodes: 8 swarm-test-91: 0ms uniqueLabels: 9 nodes: 7 swarm-test-92: 0ms uniqueLabels: 8 nodes: 6 swarm-test-93: 1ms uniqueLabels: 7 nodes: 5 swarm-test-94: 0ms uniqueLabels: 6 nodes: 4 swarm-test-95: 1ms uniqueLabels: 4 nodes: 2 swarm-test-97: 0ms uniqueLabels: 3 nodes: 1 swarm-test-98: 0ms uniqueLabels: 1 nodes: 0 swarm-test-99: 1ms Total time to remove 401 workers: 8675ms
但一旦你开始添加更多的标签,速度就会急剧下降。
下面是一些用于创建的剪切输出(完整输出附在后面)create-workers-multiple-labels.log):
...uniqueLabels: 811 nodes: 394 swarm-test-393: 1875ms uniqueLabels: 813 nodes: 395 swarm-test-394: 1883ms uniqueLabels: 815 nodes: 396 swarm-test-395: 1888ms uniqueLabels: 817 nodes: 397 swarm-test-396: 1901ms uniqueLabels: 819 nodes: 398 swarm-test-397: 1913ms uniqueLabels: 821 nodes: 399 swarm-test-398: 1915ms uniqueLabels: 823 nodes: 400 swarm-test-399: 1927ms uniqueLabels: 825 nodes: 401 swarm-test-400:创建400个工人的总时间:261866毫秒
然后相同的删除(完整的输出附加为remove-workers-multiple-labels.log):
...uniqueLabels: 39 nodes: 8 swarm-test-91: 3ms uniqueLabels: 37 nodes: 7 swarm-test-92: 2ms uniqueLabels: 35 nodes: 6 swarm-test-93: 2ms uniqueLabels: 33 nodes: 5 swarm-test-94: 1ms uniqueLabels: 31 nodes: 4 swarm-test-95: 1ms uniqueLabels: 29 nodes: 3 swarm-test-96: 0ms uniqueLabels: 27 nodes: 2 swarm-test-97: 0ms uniqueLabels: 25 nodes: 1 swarm-test-98: 1ms uniqueLabels: 1 nodes: 0 swarm-test-99: 0ms Total time to remove 401 workers: 258555ms
增加(在本例中大约是它的两倍)唯一标签的数量使
同样的过程,原来每个操作大约需要9秒
每次操作4分20秒。
有什么办法吗必威国际有限公司Jenkins.trimLabels更便宜,甚至在
面对成千上万的标签和成百上千的工人?在我看来就像
当前代码路径有几个嵌套循环(每个标签上的外循环,
内循环遍历每个worker,内循环遍历标签中每个解析过的标记
Tokenizer,对原始标签str中的每个字符进行内部循环,这些都是什么
当输入变大时,会增加执行时间。
附件
问题的链接
- 原因
-
必威国际有限公司詹金斯- 67099trimLabels经常调用cloud# canProvision
- Closed
The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">关闭
- 链接
嘿,加文,多亏了你和乔纳,这事能这么快解决。最初的调查做得很好,这让我能够专注于这个问题。这样的合作有助于问题得到快速解决。