48

在我的多核机器上,Eclipse 使用 100% 到 250% 的 CPU 功率,即使在新的普通安装和空工作区空闲时也是如此。在实际做事时,它变得缓慢且反应迟钝。

我已经尝试按照这里的建议设置内存设置:Eclipse using 100 % CPU random。那没有帮助。我还尝试了不同的 Java 版本,即 OpenJDK 和 Oracle Java 7,以及 Eclipse 版本的 Juno 和 Indigo。我在 Ubuntu 12.04 LTS 上。

作为另一个可能不相关的问题,当我关闭 Eclipse 时,Java 进程仍然保持打开状态,CPU 使用率超过 200%,需要手动终止。

4

6 回答 6

23

我今天也遇到了同样的问题,原来是索引线程占用了CPU。我最近在一个项目中添加了相当多的文件并且忘记了它。我意识到其他人不太可能有这个问题,但发布我如何调查它可能会很有用。

我正在使用基于 eclipse Juno 的 STS 运行 Ubuntu 12.10。

  1. 从命令行启动 eclipse 并将输出重定向到一个文件,这样我们就可以得到一个线程转储
  2. 让它适应一下,然后获取每个线程的 cpu 使用列表: ps -mo 'pid lwp stime time pcpu' -C java. 这是识别我的 CPU 饥饿线程的输出示例:

    PID LWP STIME 时间 %CPU

    6974 - 07:42 00:15:51 133

    7067 07:42 00:09:49 86.1

  3. 将线程 id(在我的情况下为 7067)转换为十六进制 0x1b9b(例如在命令行中使用:printf "0x%x\n" 7067)

  4. 使用 kill -3 执行 java 进程的线程转储:kill -3 6974。输出保存在启动 eclipse 时重定向 stdout 的文件中

  5. 打开文件并查找线程的十六进制 id:

    “链接索引器延迟写入 10”prio=10 tid=0x00007f66b801a800 nid= 0x1b9b可运行 [0x00007f66a9e46000]

    java.lang.Thread.State:可运行

    在 com.ibm.etools.references.internal.bplustree.db.ExtentManager$WriteBack.r

于 2013-02-08T06:05:07.140 回答
12

我只在垃圾收集器发疯时才看到这种行为,因为分配的内存确实达到了 VM 配置的最大内存限制。如果您有一个大型 Eclipse 安装,您的第一步应该始终是增加 eclipse.ini 中的内存设置

请同时激活Window -> Preferences -> General -> Show heap status。它将显示 Eclipse 当前使用了多少内存(在状态行中)。如果达到允许的最大值并且不再下降(即垃圾收集器无法清理未使用的对象),那么这正是我上面描述的指示。

编辑:了解您使用的 Eclipse 包也很好,因为它们默认包含不同的插件。经典、建模、Java EE 开发人员,...?

于 2012-07-05T19:38:05.953 回答
12

我在插件方面遇到过这个问题,但 Eclipse 本身从来没有。

您可以尝试Help > About Eclipse > Installation details通过逐个禁用插件来调试它。

于 2012-07-05T14:29:08.970 回答
10

卸载 mylyn 插件为我解决了这个问题,性能提升如此之大,以至于我将其发布为一个 6 年前的问题的答案。

转到Help->About Eclipse->Installation Details->Installed Software 并卸载您知道自己未使用的所有插件。我只卸载了 mylyn 插件,它为我创造了奇迹。

编辑:

在 Eclipse 版本:2018-09 (4.9.0) 中,可以通过关闭包和项目资源管理器来解决 Eclipse 冻结/无响应问题。

我知道这可能听起来像是一个愚蠢的解决方案,但我已经在大约 5 台对等机器上多次测试过,相信我说这个简单的解决方案消除了每台机器的冻结问题。只要包/项目资源管理器没有重新打开,他们都没有抱怨 Eclipse 反应迟钝。

于 2018-02-08T10:14:51.713 回答
1

Java多线程垃圾收集器就是垃圾。在 java 命令行中添加 -XX:-UseLoopPredicate 选项。参见错误https://bugzilla.redhat.com/show_bug.cgi?id=882968

于 2012-12-03T20:10:34.653 回答
1

面临同样的问题,在eclipse中通过了VM Argument,它对我来说效果很好。

-Xmx1300m -XX:PermSize=256m -XX:MaxPermSize=256m

于 2016-11-08T06:27:31.237 回答