不正确使用WeakHashMap引起的卡死
公司的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<K,V> e = tab[i]; e != null; e = e.next) {
if (h == e.hash && eq(k, e.get())) { V oldValue = e.value; if (value != oldValue) e.value = value; return oldValue; } } |
乍看之下,好像没啥问题,但是如果当e.next指向e自己,或者 这个链表成环的时候,这就是一个死循环!!
这个死循环好隐蔽呀!
大家可能会问,为什么会成环呢?难道jdk的实现有问题?不会那么大的错误吧!
这其实是因为WeakHashMap不是线程安全的,如果在多线程里乱用,数据就有可能被破坏,破坏的结果就是可能成环。导致一个死循环。
因此,这个问题的推断结论就是因为WeakHashMap被不正确的同步使用,导致死循环 卡死整个系统!
不正确使用WeakHashMap引起的卡死的更多相关文章
- 5 使用ip代理池爬取糗事百科
从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...
- eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法
关于 eclipse启动卡死的问题(eclipse上一次没有正确关闭,导致启动的时候卡死错误解决方法),自己常用的解决方法: 方案一(推荐使用,如果没有这个文件,就使用方案二): 到<works ...
- 【大坑】DataGridView多线程更新修改Cell单元格卡死
最新发现是Column的AutoSizeMode设置为AllCell调整宽度而造成的卡顿,还有就是在现在里面使用Invoke用匿名函数闭包的形式访问For循环的i变量值会不正确导致找不到索引而造成卡顿 ...
- LoadRunner 录制IE 8卡死
LoadRunner11录制脚本,对IE的版本是有所限制的,它只是支持IE 8 以下版本,其中包括IE 8,高出IE 8版本Loadrunner是不支持的. 我遇到LoadRunner录制脚本时IE8 ...
- Dreamweaver8卡死打开初始化(缓存重建)失败的解决的方法
无论是中文版的dreamweaver 8,还是英文版本号的dw8或绿色版本号的DW8,都可能出现打开时卡死无法启动的情况,这个bug的出现是由于先前你以前在使用dreamweaver 8的时候,定义了 ...
- JAVA提高十九:WeakHashMap&EnumMap&LinkedHashMap&LinkedHashSet深入分析
因为最近工作太忙了,连续的晚上支撑和上班,因此没有精力来写下这篇博客,今天上午正好有一点空,因此来复习一下不太常用的集合体系大家族中的几个类:WeakHashMap&EnumMap&L ...
- VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时
之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...
- 解决 Ubuntu 经常 卡死
ubuntu 的卡死可能与显卡驱动不兼容有关. 这里提供2种方式, 1.禁用原来自带的nouveau显卡驱动sudo gedit /etc/modprobe.d/blacklist.conf在最后一行 ...
- 【问题解决:启动卡死】Eclipse启动卡死的解决办法
问题描述 Eclipse启动后卡死 问题分析 由于上一次没有正确关闭,导致在启动的时候开始 问题解决 方法1(推荐): 到<workspace>\.metadata\.plugins\or ...
随机推荐
- mvc-10部署
性能 提高性能最简单的办法就是减少HTTP的请求数量,每个HTTP请求除了有TCP开销外,还包含大量的头信息: 让页面和其资源文件保持较小的体积将减少网络用时,对于互联网上的应用而言,这才是真正的瓶颈 ...
- css3 -- 多列
1.指定分列: E{column-count:2:} --- 两列 E{ -moz-column-count:2: -webkit-column-count:2: } Firefox与webkit实现 ...
- set+几何 LA 5908 Tracking RFIDs
题目传送门 题意:给一些传感器,范围在r内,再给一些询问点,问这些点能有几个传感器收到,当有墙隔绝时信号减弱,范围变小 分析:set存储传感器,用set的find来查找是否是传感器.因为询问点少,可以 ...
- Java 16进制、unicode互转
package service; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CodeCh ...
- JSP通过IP获取用户(客户端)的地理位置信息
<%!//获取客户端的IP public String getRemoteIP(HttpServletRequest request) { if (request.getHeader(" ...
- Git常用命令举例
clone一个git project到本地 git clone https://github.com/huahuiyang/network-certification.git 到这个目录下,可以发现有 ...
- HTML5拖放事件(Drag-and-Drop,DnD)
拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 拖放是在“拖放源(drag source)”和“拖放目标(drop target ...
- 书摘及理解:Servlet与JSP的关系
“Servlet是服务器端程序,它把应用逻辑嵌入到HTTP请求,在应答过程中可以直接通过PrinteWriter 输出经过逻辑处理后的动态HTML.JSP则是一种特殊的Servlet,它将Java代码 ...
- [转]基于gulp和webpack的前端工程化
本文样例代码 :https://github.com/demohi/learning-gulp 本文主要简单介绍一下基于gulp和webpack的前端工程化. 技术栈 React.js reFlux ...
- ACM: POJ 3660 Cow Contest - Floyd算法
链接 Cow Contest Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Descri ...