eclipse死机 java清空_eclipse 僵死/假死 问题排查及解决

症状:

使用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遇到了麻烦的问题。

939af8104441870beab922e079fa0370.png

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

15afe140df0bb75ab9e16ad12a4df3b7.png

5、使用jstack连续对eclipse对应的java进程做threaddump,然后将Process

Explorer中看到的进程ID做16进制转换,到ThreadDump中加上0x

前缀即能找到对应线程。通过这里,也就基本定位到问题的出处了。例如我的 TID:1372,转为16进制是55C,加上0x前缀则是 0x55c。

Html代码  7a1e7afc0f2addbbdb746966b60e9e4a.png

"Worker-10"prio=6tid=0x0000000008d30800nid=0x55crunnable [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)

而且通过数次重现,均是

Html代码  7a1e7afc0f2addbbdb746966b60e9e4a.png

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又僵死了。

54bf352692f3d4e80a068a308aab30b5.png

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

Note:

windows版的eclipse的console限制了一行最大长度,

解决方法:

Right click on

in console -> Preferences... -> check Fixed width console. Now you

have auto word wrap and everything shows ok. Seems like Eclipse console

have a limit on number of characters displayed in one line.

相关资源:Leslie人口预测模型
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页

打赏

孙雪芸

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者