在我的多核机器上,Eclipse使用100到250%的CPU功率,即使在新的普通安装和空工作空间闲置时也是如此 . 当实际做事时,它变得缓慢而无反应 .
我尝试按照此处的建议设置内存设置:Eclipse uses 100 % CPU randomly . 这没有用 . 我还尝试了不同的Java版本,即OpenJDK和Oracle Java 7,以及Eclipse版本的Juno和Indigo . 我在Ubuntu 12.04 LTS上 .
作为另一个可能不相关的问题,当我关闭Eclipse时,Java进程仍然保持开放状态,CPU使用率超过200%,需要手动终止 .
6 回答
我今天遇到了同样的问题,结果是一个占用CPU的索引线程 . 我最近在项目中添加了相当多的文件而忘记了它 . 我意识到其他人不太可能有这个问题,但发布我的调查方式可能会有用 .
我正在使用基于eclipse Juno的STS运行Ubuntu 12.10 .
从命令行启动eclipse并将输出重定向到文件,以便我们可以获得一个线程转储
允许它稍微解决,然后得到每个线程的cpu使用情况列表:ps -mo'pid lwp stime time pcpu'-java . 这是一个输出的示例,它标识了我的cpu饥饿线程:
PID LWP STIME TIME%CPU
6974 - 07:42 00:15:51 133
7067 07:42 00:09:49 86.1
将线程id(在我的情况下为7067)转换为十六进制0x1b9b(例如在命令行中使用:printf“0x%x \ n”7067)
使用kill -3:kill -3 6974执行java进程的线程转储 . 当你启动eclipse时,输出保存在你重定向stdout的文件中
打开文件并查找线程的十六进制ID:
"Link Indexer Delayed Write-10" prio = 10 tid = 0x00007f66b801a800 nid = 0x1b9b runnable [0x00007f66a9e46000]
java.lang.Thread.State:RUNNABLE
在com.ibm.etools.references.internal.bplustree.db.ExtentManager $ WriteBack.r
我有插件这个问题,但从来没有使用Eclipse本身 .
您可以尝试通过转到
Help > About Eclipse > Installation details
并逐个禁用插件来调试它 .我只是在垃圾收集器疯狂时才看到这种行为,因为分配的内存确实达到了VM配置的最大内存限制 . 如果您安装了大型Eclipse,则第一步应始终为increase the memory settings in the eclipse.ini .
还请激活窗口 - >首选项 - >常规 - >显示堆状态 . 它将向您显示Eclipse当前使用的内存量(在状态行中) . 如果它达到允许的最大值并且不再下降(即垃圾收集器无法清除未使用的对象),那么这正是我上面所描述的指示 .
编辑:了解您使用的Eclipse包也很好,因为默认情况下包含不同的插件 . 经典,建模,Java EE开发人员,......?
卸载mylyn插件为我解决了问题,性能提升非常激烈,我将其作为一个6岁问题的答案发布 .
转到
Help->About Eclipse->Installation Details->Installed Software
并卸载您未使用的所有插件 know . 我只卸载了mylyn插件,它给我带来了惊喜 .Java多线程垃圾收集器是垃圾 . 在java命令行中添加-XX:-UseLoopPredicate选项 . 参见例如这个bug https://bugzilla.redhat.com/show_bug.cgi?id=882968
面对同样的问题,在eclipse中传递了VM Argument,它对我来说很好 .
-Xmx1300m -XX:PermSize = 256m -XX:MaxPermSize = 256m