原文链接:http://www.iteye.com/topic/1133941

症状:

使用Eclipse win 64位版本,indigo及kepler都重现了,使用tomcat 6.0.39,jdk1.6.u45及1.7u45均尝试了,也重现。

重现步骤很简单,使用debug模式启动时较容易出来,debug启动tomcat,(我的是webapp)然后在页面上随便点点即发现eclipse僵死,且任何从浏览器发出的请求都卡住不能被接收执行。

1、然后从任务管理器直接杀掉eclipse对应的javaw进程(有些可能是eclipse进程,根据指定的vm而定--eclipse.ini中 -vm指定)后,tomcat恢复正常,一切都正常了。

2、等待很久,真的很久,它自己又正常了,但过一会,又是这样。如果没事且有耐心的话,再等很久又会正常的?

排查步骤:

1、怀疑是eclipse或tomcat内存问题,于是乎jstat gc 查看发现一切正常。

2、从任务管理器查看tomcat 对应的java进程资源占用正常。

3、从任务管理器查看eclipse对应java进程,cpu占用 25%且持续很长时间。因为我是4核,所以实际已经占满了一个CPU资源了,这说明eclipse遇到了麻烦的问题。

4、使用Process Explorer 工具查看这个java进程中线程情况,发现有1个线程几乎占用了 这个进程绝大部分CPU资源(有时可能是两个线程),这个线程几乎是死循环了。

5、使用jstack连续对eclipse对应的java进程做threaddump,然后将Process Explorer中看到的进程ID做16进制转换,到ThreadDump中加上0x 前缀即能找到对应线程。通过这里,也就基本定位到问题的出处了。例如我的 TID:1372,转为16进制是55C,加上0x前缀则是 0x55c。

  1. "Worker-10" prio=6 tid=0x0000000008d30800 nid=0x55c runnable [0x000000000d3cf000]
  2. java.lang.Thread.State: RUNNABLE
  3. at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
  4. at java.util.regex.Pattern$Curly.match0(Pattern.java:3770)
  5. at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
  6. at java.util.regex.Pattern$Start.match(Pattern.java:3055)
  7. at java.util.regex.Matcher.search(Matcher.java:1105)
  8. at java.util.regex.Matcher.find(Matcher.java:561)
  9. at org.eclipse.ui.internal.console.ConsolePatternMatcher$MatchJob.run(ConsolePatternMatcher.java:130)
  10. at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
"Worker-10" prio=6 tid=0x0000000008d30800 nid=0x55c runnable [0x000000000d3cf000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3770)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$Start.match(Pattern.java:3055)
at java.util.regex.Matcher.search(Matcher.java:1105)
at java.util.regex.Matcher.find(Matcher.java:561)
at org.eclipse.ui.internal.console.ConsolePatternMatcher$MatchJob.run(ConsolePatternMatcher.java:130)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

而且通过数次重现,均是

  1. at org.eclipse.ui.internal.console.ConsolePatternMatcher$MatchJob.run(ConsolePatternMatcher.java:130)
at org.eclipse.ui.internal.console.ConsolePatternMatcher$MatchJob.run(ConsolePatternMatcher.java:130)

这个从名称就能看出与console有关了。eclipse官方也报过类似bug,是在07年和11年报的,理论上早修复了。

6、差不多已经定位了,于是就从console下手了。

观察console,发现我们的框架竟然把所有给浏览器的请求和响应都输出了,因为有个请求将会返回 200K左右的数据,相当于在Console中一次直接输出了200K的日志而且是没换行的,所以一开始我也没注意到。

回过头看我Console配置,最大字符数是80000≈78K,我一条日志就远超出Console默认的展示量了。

7、接下来就开始解决问题

7.1)将Console字符限制取消,即无限制。这个日志多且程序要在Eclipse中跑很久不现实,但我这么设置后实际就正常了,没有再出现eclipse僵死的情况。然后我手贱的点了下Console窗口上的“Clear Console”操作,Eclipse又僵死了。

7.2)因为实际那个日志输出对我开发意义不大,是INFO级别的,有点类似访问日志。于是乎将其对应的LOG Append级别设置为WARN,不输出这个日志了,一切就回归正常了。

console引起的eclipse 僵死/假死 问题排查及解决[转]的更多相关文章

  1. eclipse 僵死/假死 问题排查及解决

    症状: 使用Eclipse win 64位版本,indigo及kepler都重现了,使用tomcat 6.0.39,jdk1.6.u45及1.7u45均尝试了,也重现. 重现步骤很简单,使用debug ...

  2. WinForm查询大数据界面假死,使用异步调用解决

    用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后 ...

  3. C# Winform 窗体界面”假死”后台线程阻塞 解决办法–BeginInvoke

    原文:C# Winform 窗体界面"假死"后台线程阻塞 解决办法–BeginInvoke 这个方法可以用在任何后台任务耗时较长,造成界面“假死”界面控件不更新的情况. 比如要要执 ...

  4. dedecms 安装后 管理后台ie假死 无响应的解决方法

    在网站后台(我的是dede)uploads/emplets/index_body.htm中找到并注释掉以下代码: <script type=”text/javascript”>functi ...

  5. Zookeeper已经分布式环境中的假死脑裂

    Zookeeper简介 在上班之前都不知道有这样一个东西,在开始说假死脑裂之前先说说Zookeeper吧. Zookeeper zookeeper是一个分布式应用程序的协调服务.它是一个为分布式应用提 ...

  6. tomcat 假死现象(转)

    1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台 ...

  7. tomcat 假死

    1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照.1.2编写背景最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台to ...

  8. 解决c# progressBar更新出现界面假死

    最近一个项目需求中的一个功能是需要用progressBar反映处理文件的进度. 研究了Invoke和BeginInvoke方法. Control.Invoke 方法 (Delegate) :在拥有此控 ...

  9. 分析java进程假死状况

    摘自: http://www.myexception.cn/internet/2044496.html 分析java进程假死情况 1 引言 1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常 ...

随机推荐

  1. 4395: [Usaco2015 dec]Switching on the Lights

    每次到达一个点,或者点亮一个房间的灯的时候,检查一下它四周的点能否走. 一开始看错题了..要求的是最多能开多少房的灯. #include<cstdio> #include<iostr ...

  2. [bzoj2836] 魔法树

    俩操作:增加路径上的点的权值.查询子树的权值和. 想了想似乎只能树链剖分了..好久没写链剖+数据结构了TAT 一开始没开LL炸了一发(明明有想到的..我果然是傻逼= = #include<cst ...

  3. the quick brown fox jumps over the lazy dog

    THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG

  4. rexray在CentOS上不能创建ceph rbd的docker volume问题定位

    背景 我们通过docker的rexray插件来创建ceph rbd设备的docker volume,但总提示创建失败. # docker volume create --driver=rexray - ...

  5. Oracle:控制语句 IF..ELSIF语句、CASE语句、FOR循环语句

    --多重if语句(注意点:BEGIN END ,IF 条件 THEN,ELSIF 条件 THEN,ELSE... END IF)BEGIN IF FALSE THEN DBMS_OUTPUT.put_ ...

  6. HTML5 Audio/Video 标签,属性,方法,事件汇总 (转)

    标签属性:src:音乐的URLpreload:预加载autoplay:自动播放loop:循环播放controls:浏览器自带的控制条 1 http://www.abc.com/test.mp3&quo ...

  7. DedeCMS首页调用缩略图为背景

    配合{dede:arclist}{/dede:arclist}标签使用,既可以实现把缩略图作为背景,另外还需要用到background-position这个标签,做好背景的定位. http://www ...

  8. 《并行程序设计导论》——MPI(Microsoft MPI)(6):并行排序算法

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  9. C# 内置 DateTime类详解

    C# 内置 DateTime类详解 摘抄自微软官方文档,用来方便自己查阅:网址:https://msdn.microsoft.com/zh-cn/library/system.datetime(v=v ...

  10. 提高PHP性能的一些小知识

    自PHP面世起以其良好的跨平台性,高效的开发机制有WEB领域占有很大份额.因为它的运行机制是脚本解释运行执行后相关资源都会被回收,所以PHP开发人员很少关心他的资源占用所导致性能问题,但本人是个追求极 ...