公司的jenkins今天出了一点问题,起来以后,总是处于等待状态,所有的任务无法正常加载。登陆界面也出不了。而且cpu占用率100%

把线程导出来,看到:

“Loading job NMS_Patchset_Build” – Thread t@25
java.lang.Thread.State: BLOCKED
at hudson.plugins.throttleconcurrents.ThrottleJobProperty.setOwner(ThrottleJobProperty.java:96)
- waiting to lock <36c782a4> (a java.util.HashMap) owned by “Loading job CG_Daily_Build_Gitolite_Klocwork” t@23
at hudson.plugins.throttleconcurrents.ThrottleJobProperty.setOwner(ThrottleJobProperty.java:31)
at hudson.model.Job.onLoad(Job.java:209)
at hudson.model.AbstractProject.onLoad(AbstractProject.java:296)
at hudson.model.Project.onLoad(Project.java:90)
at hudson.model.Items.load(Items.java:221)
at jenkins.model.Jenkins$18.run(Jenkins.java:2553)
at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

Locked ownable synchronizers:
- locked <54aba0ac> (a java.util.concurrent.ThreadPoolExecutor$Worker)

“Loading job CG_Daily_Build” – Thread t@24
java.lang.Thread.State: BLOCKED
at hudson.plugins.throttleconcurrents.ThrottleJobProperty.setOwner(ThrottleJobProperty.java:96)
- waiting to lock <36c782a4> (a java.util.HashMap) owned by “Loading job CG_Daily_Build_Gitolite_Klocwork” t@23
at hudson.plugins.throttleconcurrents.ThrottleJobProperty.setOwner(ThrottleJobProperty.java:31)
at hudson.model.Job.onLoad(Job.java:209)
at hudson.model.AbstractProject.onLoad(AbstractProject.java:296)
at hudson.model.Project.onLoad(Project.java:90)
at hudson.model.Items.load(Items.java:221)
at jenkins.model.Jenkins$18.run(Jenkins.java:2553)
at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

Locked ownable synchronizers:
- locked <2e71d99e> (a java.util.concurrent.ThreadPoolExecutor$Worker)

“Loading job CG_Daily_Build_Gitolite_Klocwork” – Thread t@23
java.lang.Thread.State: RUNNABLE
at java.util.WeakHashMap.put(WeakHashMap.java:520)
at hudson.plugins.throttleconcurrents.ThrottleJobProperty.setOwner(ThrottleJobProperty.java:102)
- locked <36c782a4> (a java.util.HashMap)
at hudson.plugins.throttleconcurrents.ThrottleJobProperty.setOwner(ThrottleJobProperty.java:31)
at hudson.model.Job.onLoad(Job.java:209)
at hudson.model.AbstractProject.onLoad(AbstractProject.java:296)
at hudson.model.Project.onLoad(Project.java:90)
at hudson.model.Items.load(Items.java:221)
at jenkins.model.Jenkins$18.run(Jenkins.java:2553)
at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

Locked ownable synchronizers:
- locked <38b3b19e> (a java.util.concurrent.ThreadPoolExecutor$Worker)

“Loading job NMS_GuangZhou_Patchset_Build” – Thread t@22
java.lang.Thread.State: BLOCKED
at hudson.plugins.throttleconcurrents.ThrottleJobProperty.setOwner(ThrottleJobProperty.java:96)
- waiting to lock <36c782a4> (a java.util.HashMap) owned by “Loading job CG_Daily_Build_Gitolite_Klocwork” t@23
at hudson.plugins.throttleconcurrents.ThrottleJobProperty.setOwner(ThrottleJobProperty.java:31)
at hudson.model.Job.onLoad(Job.java:209)
at hudson.model.AbstractProject.onLoad(AbstractProject.java:296)
at hudson.model.Project.onLoad(Project.java:90)
at hudson.model.Items.load(Items.java:221)
at jenkins.model.Jenkins$18.run(Jenkins.java:2553)
at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
at jenkins.model.Jenkins$7.runTask(Jenkins.java:895)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

Locked ownable synchronizers:
- locked <47704765> (a java.util.concurrent.ThreadPoolExecutor$Worker)

在加载的几个任务中,只有一个是runnable的(CG_Daily_Build_Gitolite_Klocwork)。他占了一个锁,导致其他的线程都无法继续运行了。这个CG_Daily_Build_Gitolite_Klocwork一直不结束。而且卡在

at java.util.WeakHashMap.put(WeakHashMap.java:520)

是jdk的代码,到里面去看看:在差不多520行的地方,这个put()是这么写的:

1
2
3
4
5
6
7
8
for (Entry&lt;K,V&gt; e = tab[i]; e != null; e = e.next) {
if (h == e.hash &amp;&amp; eq(k, e.get())) {
V oldValue = e.value;
if (value != oldValue)
e.value = value;
return oldValue;
}
}

乍看之下,好像没啥问题,但是如果当e.next指向e自己,或者 这个链表成环的时候,这就是一个死循环!!
这个死循环好隐蔽呀!
大家可能会问,为什么会成环呢?难道jdk的实现有问题?不会那么大的错误吧!
这其实是因为WeakHashMap不是线程安全的,如果在多线程里乱用,数据就有可能被破坏,破坏的结果就是可能成环。导致一个死循环。
因此,这个问题的推断结论就是因为WeakHashMap被不正确的同步使用,导致死循环 卡死整个系统!

不正确使用WeakHashMap引起的卡死的更多相关文章

  1. 5 使用ip代理池爬取糗事百科

    从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...

  2. eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法

    关于 eclipse启动卡死的问题(eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法),自己常用的解决方法: 方案一(推荐使用,如果没有这个文件,就使用方案二): 到<works ...

  3. 【大坑】DataGridView多线程更新修改Cell单元格卡死

    最新发现是Column的AutoSizeMode设置为AllCell调整宽度而造成的卡顿,还有就是在现在里面使用Invoke用匿名函数闭包的形式访问For循环的i变量值会不正确导致找不到索引而造成卡顿 ...

  4. LoadRunner 录制IE 8卡死

    LoadRunner11录制脚本,对IE的版本是有所限制的,它只是支持IE 8 以下版本,其中包括IE 8,高出IE 8版本Loadrunner是不支持的. 我遇到LoadRunner录制脚本时IE8 ...

  5. Dreamweaver8卡死打开初始化(缓存重建)失败的解决的方法

    无论是中文版的dreamweaver 8,还是英文版本号的dw8或绿色版本号的DW8,都可能出现打开时卡死无法启动的情况,这个bug的出现是由于先前你以前在使用dreamweaver 8的时候,定义了 ...

  6. JAVA提高十九:WeakHashMap&EnumMap&LinkedHashMap&LinkedHashSet深入分析

    因为最近工作太忙了,连续的晚上支撑和上班,因此没有精力来写下这篇博客,今天上午正好有一点空,因此来复习一下不太常用的集合体系大家族中的几个类:WeakHashMap&EnumMap&L ...

  7. VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时

    之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...

  8. 解决 Ubuntu 经常 卡死

    ubuntu 的卡死可能与显卡驱动不兼容有关. 这里提供2种方式, 1.禁用原来自带的nouveau显卡驱动sudo gedit /etc/modprobe.d/blacklist.conf在最后一行 ...

  9. 【问题解决:启动卡死】Eclipse启动卡死的解决办法

    问题描述 Eclipse启动后卡死 问题分析 由于上一次没有正确关闭,导致在启动的时候开始 问题解决 方法1(推荐): 到<workspace>\.metadata\.plugins\or ...

随机推荐

  1. JAVA第三周作业

    一:枚举 package homework; public class EnumTest { public static void main(String[] args) { Size s=Size. ...

  2. light oj 1422 Halloween Costumes (区间dp)

    题目链接:http://vjudge.net/contest/141291#problem/D 题意:有n个地方,每个地方要穿一种衣服,衣服可以嵌套穿,一旦脱下的衣服不能再穿,除非穿同样的一件新的,问 ...

  3. iOS开发代码规范(通用)

    1. 关于命名 1> 统一要求 含义清楚,尽量做到不需要注释也能了解其作用,若做不到,就加注释 使用全称,不适用缩写 2> 类的命名 大驼峰式命名:每个单词的首字母都采用大写字母 例子:M ...

  4. input属性控制弹出键盘类型

    /**   * ios弹起数字键盘有三种方法   * 1. <input type="number"> 可以弹起带有小数点的键盘,可以键盘不干净,有其它各种字符,可切换 ...

  5. HDU 2861 (DP+打表)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2861 题目大意:n个位置,m个人,分成k段,统计分法.S(n)=∑nk=0CknFibonacci(k ...

  6. HDU 3069 (树形DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3069 题目大意:用最少警力,监控一个树,逮住逃犯.即最大警力去一个子树捉人时,确保父点至少被一个警察 ...

  7. NOIp 2012 #1 Vigenère 密码 Label:模拟

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  8. 【HDU】4089 Activation

    http://acm.hdu.edu.cn/showproblem.php?pid=4089 题意: 有n个人排队等着在官网上激活游戏.主角排在第m个. 对于队列中的第一个人.有以下情况:1.激活失败 ...

  9. 【HDU】1693 Eat the Trees

    http://acm.hdu.edu.cn/showproblem.php?pid=1693 题意:n×m的棋盘求简单回路(可以多条)覆盖整个棋盘的方案,障碍格不许摆放.(n,m<=11) #i ...

  10. xml学习

    一,数据类型 xmlChar  对char的基本代替,是一个UTF-8编码字符串中的一个字节.如果你的数据使用了其他编码,在使用libxml函数前就必须转换为UTF-8. xmlDoc和xmlDocP ...