症状:
使用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系统中,僵死进程(Zombie Process)是一个非常重要的概念。...僵死进程是LINUX系统中一个非常重要的问题,需要我们认真对待。如果我们不能正确地处理僵死进程,将会引发系统问题。
本文将详细介绍如何通过SQL查询定位僵死进程,并提供具体的解决方案,帮助解决如无法停库等异常问题。 #### 一、理解僵死进程 僵死进程是指那些已经完成其任务但并未退出或者被正确清理的进程。在Oracle环境中,...
linux 查找僵死进程,重启服务,有利于知道哪些服务已经死掉进程还在
Linux僵死进程的产生与避免 Linux 操作系统中,僵死进程(Zombie Process)是一种特殊的进程状态,它是指一个进程已经终止,但是其父进程没有通过wait或waitpid函数来回收它的状态信息,而使得进程所占用的资源...
linux 下的 bash shell脚本,用于杀死僵死的进程,并重新启动.
这种方法适用于临时解决问题,但并不能找出问题的根本原因。 对于CPU使用率低但负载高的情况,问题可能出在“负载平均”(load average)上。负载平均值反映了在一段时间内系统中平均有多少任务在等待CPU处理。如果...
通过以上策略,我们可以有效解决MFC对话框未响应或卡死的问题,提高应用程序的用户体验。在实际开发中,还需要根据具体情况进行优化和调整,确保线程安全和程序的稳定运行。在压缩包中的"MFCWorkSmoothly_wer9163...
在IT行业中,操作系统管理和优化是至关重要的任务,尤其是在大型企业或服务器环境中...通过使用各种系统工具、监控设备和自动化解决方案,IT专业人员可以及时发现并解决这些问题,从而保证企业的业务连续性和用户体验。
"JDBC连接Oracle数据库常见问题及解决方法" 本文将对 JDBC 连接 Oracle 数据库常见问题进行总结和解决方法的介绍。以下是针对不同问题的解决方案: 1. Jbuilder 正确连接 Oracle 数据库需要注意的几个问题 在使用...
在解决多线程意外死亡重启问题时,我们可以结合线程池和观察者模式。首先,创建一个线程池,将任务提交到线程池中执行。然后,每个线程在执行过程中都可以作为一个观察者,监听自身是否出现异常。一旦线程意外死亡,...
《SCRATCH3:小鸟大战僵死——创新游戏模式解析》 Scratch3,作为麻省理工学院(MIT)媒体实验室的“终身幼儿园团队”开发的一款免费编程语言和视觉化编程工具,深受全球青少年喜爱,尤其适合编程初学者。本篇我们将...
如果手动杀掉一个进程仍不能解决问题,可以编写脚本批量杀死所有锁定的进程。在提供的示例中,通过grep筛选出"Locked"状态的进程,然后循环执行`KILL`命令。 2. **批量处理锁定进程** 在某些情况下,可能需要批量...
在本文档中,我们探讨的是IBM WebSphere MQ这一存储中间件在实际操作中遇到的一些常见问题及其解决方案。WebSphere MQ,也称为MQSeries,是一种消息中间件,它允许应用程序在不同的操作系统、网络协议和应用之间交换...
### WIN7下新建VC项目时系统崩溃的解决方法 #### 背景介绍 随着操作系统的发展,许多老旧的开发工具在新系统上遇到了兼容性问题。...希望上述解决方案能帮助遇到类似问题的开发者们顺利解决问题,提高开发效率。
### 存储中间件-MQ常见问题解决方法FAQ #### 1. 无法创建MQ队列管理器 ...通过上述步骤可以有效地诊断并解决问题,确保MQ系统的稳定运行。如果遇到其他问题或疑问,可以联系技术支持或查阅官方文档获取更多帮助。
【标题解析】 "Vs2017 C++源码 植物大战僵死辅助收花和金币" 这个标题表明这是一个基于C++语言的项目,...对于C++新手来说,这是一个极好的实践平台,可以帮助他们将理论知识应用于实际问题解决,从而提升编程技能。
通过对这些案例的研究,我们可以了解到如何识别、分析和解决Linux系统死机的问题,这对于维护系统的稳定性和提高故障排查能力至关重要。 首先,硬件问题可能导致Linux死机,例如内存条损坏、CPU过热、硬盘错误等。...
《植物大战僵死》是一款广受欢迎的塔防游戏,而C#是一种强大的编程语言,尤其在游戏开发领域有着广泛的应用。本实例中的辅助工具是利用C#编写的,旨在帮助玩家更轻松地进行游戏。下面将详细介绍这个C#辅助工具的知识...
selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。 /** * Close the current window, quitting the browser if it's the last window ...