症状:
使用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。
"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)
而且通过数次重现,均是
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,不输出这个日志了,一切就回归正常了。
相关推荐
LINUX查看和处理僵死进程的具体操作方法。
linux 查找僵死进程,重启服务,有利于知道哪些服务已经死掉进程还在
linux 下的 bash shell脚本,用于杀死僵死的进程,并重新启动.
oracle杀僵死进程,解决无法停库等异常问题。
Linux僵死进程的产生与避免.pdf
Linux有多种机制来保证发生系统崩溃后,可以获取有价值的信息用以分析问题。确定是硬件故障,还是应用程序bug导致的。 本文介绍了几种方法来获取各种崩溃时产生的信息,并分析故障产生的原因。
selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。 /** * Close the current window, quitting the browser if it's the last window ...
行业分类-设备装置-一种僵死低效进程的识别方法和识别设备
项目背景及目标 项目背景 项目目标 需求分析 项目总体方案 数据库性能优化 检查 Oracle 数据库性能 检查数据库的等待事件 Disk Read 最高的 SQL 语句的获取 查找前十条性能差的 sql 等待时间最多的 个...
修复输入网址时僵死的问题 (Mac 下与 Wakoopa 冲突问题) 修复 widget 升级问题 修复拖曳按钮到标签栏时崩溃的问题 修复新到的邮件、新闻、订阅未索引的问题 修复一些快速拨号问题 修复一些 widget 问题 修复 ...
Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子...这就是引入僵死状态的原因:尽管从技术上来说进程已死,但必须保存它的描述符,直到父进程得到通知。 如果一个进程已经终止,但是它的父进程尚未调用 wai
原创作品,好玩小游戏,只运行在scratch,初学者必学,推荐 推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐推荐
VS2017工程源码,通过采样像素匹配花和金币,实现自动收花和金币。 适合新手练习C++,可以修改源码,做更好的处理策略。
用C#编写的《植物大战僵尸》辅助工具(外挂)实例。 提供源码,下载后即可本地运行,可快速学习一般游戏的简单外挂快速制作。
SlickEdit 通用破解文件,且附带解决 SlickEdit Pro v22.0.0.9 在 WIN7 64位僵死挂起的问题
这是一个简单的swt界面,里面涉及到了一些窗口的基本控件。
Unix编程常见问题解答(FAQ/Frequently Asked Questions)(v1.37)(中文版 v0.1.0) 作者:天下一菜 来源:博客园 问题目录 ******** (译者:这里我有意保留原文以便于查询) 1. Process Control 进程控制 1.1 Creating ...
当然首先想到的是写一个触发的脚本,在触发脚本中使用死循环来解决此问题,如下: cat kick.sh 代码如下: #!/bin/bash while : ;do /home/somedir/scripts.sh 2>/dev/null & sleep 3 done 注意第一次运行时请...
如果僵死在某一个节点,直接强制制止,多重复几遍,知道ok为止。 启动redis之前 修改好redis.conf文件 vim /etc/redis.conf 把daemonize no 改成 daemonize yes,这样启动redis时就会成会后台服务 把#bind 127.0.0.1...
这是一个令人忧伤的软件——看看你的微信好友谁删除你了