Eclipse (Kepler) 会定期停止响应几秒钟

LSe*_*rni 5 freeze eclipse

平台

我在 64 位 Windows 7 Professional 上使用 Eclipse Kepler 4.3.2 (.M20140221-1700),运行在带有 8GB RAM 的 Dell E6500 上。Java VM 是 1.7_u51。Java 自动更新和 Windows 更新都处于活动状态。

症状

据我所知,他们是在 4 月 9 日开始的。之前一切都运行良好。在编辑一些文件(不是全部,而是几种不同类型:.html、.php、.js,甚至 .css)时,Eclipse 每隔几秒钟就会停止响应。

与内容辅助有一些联系,因为使用 Ctrl-Space 调用内容辅助将在发生冻结的文件中触发立即冻结。

.metadata/.log文件报告内存不足错误,但我认为这是一个红鲱鱼 - 这是另一个症状,而不是真正的原因:

!ENTRY org.eclipse.e4.ui.workbench 4 0 2014-04-10 12:55:13.296
!MESSAGE 
!STACK 0
org.eclipse.e4.core.di.InjectionException: java.lang.OutOfMemoryError: Java heap space
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:63)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:243)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:224)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:167)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:285)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:504)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:555)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:376)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.access$0(KeyBindingDispatcher.java:322)
    at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:84)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1056)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
    at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1108)
    at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104)
    at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1525)
    at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4723)
    at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:344)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4611)
Run Code Online (Sandbox Code Playgroud)

最初认为问题是内存不足我增加了 Eclipse 的堆大小。这实际上延长了冻结时间。

到目前为止的假设

正在发生的事情可以由 Content Assist 触发,并导致无限循环,泄漏内存直到子例程放弃。通过增加可用内存,我可以让 Eclipse 在填充 4 GB RAM 并放弃之前花费整整一分钟;我可以通过将堆减少到 40 Mb 来稍微改善这个问题,这只需四到五秒就可以中止(但我需要一个更大的堆用于其他目的,所以这不是一个可行的解决方法,但是这不是你的方式解决问题)。

尝试和调查

  • 2014 年 4 月 8 日,当麻烦开始时,是补丁星期二。大约在那个时候,推送了以下更新。这些似乎都与可能影响 Eclipse 的任何事情无关;我尝试回滚 2922229 和 2929437 无济于事,然后重新安装它们。

    • KB2928562 EFS 相关
    • KB2922229 MS14-019 与 .BAT 和 .CMD 相关。
    • KB2908783 iSCSI 相关
    • KB2929437 IE11 相关
    • KB2830477 RemoteApp 相关
    • KB2800095 智能卡相关
    • KB2936068 MS14-018 IE11相关
    • KB2923545 RDP 8.1 中的连接可靠性
  • 通过首先禁用自动激活然后取消选中所有提案类型(Word、模板、其他 Javascript)来禁用 HTML 和 Javascript 编辑器中的内容辅助可以减少问题,但不能解决问题。

  • 以大扫除模式启动 Eclipse 的正常巫毒技术,用于解决最令人困惑的问题 ( eclipse -clean -clearPersistedState) 也几乎没有用。

  • 清除 eclipse.ini 没有产生结果。

  • 使用 FileMon/ProcMon/wireshark 监控文件和网络活动并没有发现任何相关信息。

红鲱鱼

  • 堆大小不是解决方案,如上所述。

  • 我遇到了另一个我不确定是否相关的错误,“错误解码问题标识符 1073741824”。在十六进制中为 0x40000000,对我来说它看起来是虚假的。无论如何,谷歌搜索没有产生任何相关信息,并且包括原始错字(它将数字称为问题标识符而不是标识符)强化了我的观点,即它是一个虚假代码

下一步

到目前为止发现的线索的缺乏让我觉得我错过了一些非常明显的东西,但在继续“焦土”策略之前 - 完全删除 Eclipse 并重新安装,并重新导入我的所有项目 - 我决定问比我更聪明的人.

同时,我将尝试从 Eclipse 中删除所有不必要和非必要的插件。

如果这一切都失败了,我想我会尝试一下 NetBeans 8。

LSe*_*rni 1

结语

按照我的计划,我删除并重新安装了开普勒......但没有任何效果。

因此,在设置“焦土行动”并因此清点我必须重新安装的所有软件时,我注意到/记得我或多或少在同一时间段内进行了Java 更新。

所以我:

  • 再次移除开普勒,
  • 也删除了Java,
  • 运行了注册表优化(Pirisoft 的 CCleaner),发现我的注册表出现了各种各样的问题(这对于几个可疑的“优化器”来说很常见,只有当确实出现问题时才会在 CCleaner 中发生;我可以推荐的另一个好的清理工具是 Auslogics)。
  • 重新安装了最新的 Java 更新,
  • 重新安装开普勒
  • 已验证eclipse.ini我正在使用新的虚拟机
  • 重新导入了一个项目
  • 测试了一下。到目前为止,一切都很好...
  • 重新安装了所有各种插件
  • 重新导入所有其他项目
  • 一一测试
  • 这一次,它成功了!

是更新的吗?是注册表清理吗?难道我第一次没有设置正确的虚拟机(即我的验证实际上是配置更改)?老实说我不知道​​。

现在,我偶尔仍然会遇到远程托管的一个项目的问题(即通过 VPN 访问文件)。我很确定这仅意味着 Eclipse 不能很好地应对网络延迟。但除此之外就不会再冻结了。