平台

平台

平台

我在 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)

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

迄今为止的假设

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

尝试和调查

  • 2014 年 4 月 8 日,问题开始出现,那天是补丁星期二。大约在那个时候,发布了以下更新。这些更新似乎与可能影响 Eclipse 的任何内容都无关;我尝试回滚 2922229 和 2929437,但没有成功,然后重新安装了它们。

    • KB2928562 EFS 相关
    • KB2922229 MS14-019 与 .BAT 和 .CMD 相关。
    • KB2908783iSCSI 相关
    • 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。

答案1

结语

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

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

所以我:

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

是更新吗?是注册表清理吗?我能不是第一次就设置了正确的虚拟机(即我的确认实际上是配置更改)?说实话,我不知道。

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

答案2

这个问题也发生在安装了 4GB RAM 的 Intel Core i5 CPU 上。它以大约 50% 的 RAM 使用率运行,并且没有 CPU 过载。但是每次我命令任何鼠标事件时,eclipse 都会冻结。我注意到 .metadata/.log 充满了 IDE 错误。

所以我卸载了所有插件,然后 eclipse 就不再冻结了。我只安装了 subversion 和 CDT 插件,eclipse 仍然正常工作。我还不知道到底是哪个插件导致了冻结。

相关内容