lion – 为什么Java在我的机器上消耗100%的CPU?

我有一个运行10.7.2的iMac(2010年初),但问题也出现在10.6.x上.症状很简单,我的2个核心之一正处于100%利用率,Java进程负责过度使用.

我做了什么来排除故障?

>重新启动 – 只需重新启动java进程并看到相同的条件.
>杀死Java进程 – 与重启一样.
>卸载并重新安装Java – 安装Java后不久,CPU恢复到100%.
>使用ps“进程ID”我可以看到它是在启动时产生的,并且用于启动进程的命令是:

java -Djava.awt.headless=true -jar /tmp/ics29586

> ics29586文件是一个11mb的二进制文件.
>删除了ics29586文件 – 在下次重启过程中重新创建文件并看到相同的条件
>创建新用户帐户,重新启动并以新用户身份登录 – 可以看到相同的条件.
>使用Java设置并在每次更改后重新启动过程 – 看到相同的情况.
>完成机器重建 – 安装Java后不久,CPU恢复到100%.

那么,有没有人得到导致它的原因和解决方法的答案,或者有关进一步解决问题的方法的一些建议?

回应一些要求更多信息的评论:

>我没有运行崩溃计划.
>我无法弄清楚如何让Activity Monitor向我展示打开的文件,但谷歌搜索建议LSOF是你想知道的很好的匹配.它显示没有打开的文件:

Deep-Desk:LaunchAgents photo$sudo lsof -c java
Deep-Desk:LaunchAgents photo$

>目前,Java进程有220个端口
> LaunchDaemons或LaunchAgents文件夹中唯一感兴趣的文件是:

-rw-r--r--   1 root  wheel   568B 10 Mar  2011 com.microsoft.office.licensing.helper.plist     

>其他一切都是com.apple或者在问题首次出现后有一个日期.通过测试,我已将com.microsoft文件重命名为old.com.microsoft,但它没有任何区别.我还将文件完全移出LaunchDaemons目录,这也没有任何区别,进程仍然重新生成,几分钟内没有做太多事情,然后失去控制并消耗1核心上的所有CPU.

解决方法:

我也不知道,但这里是如何找到更多

在完全未知的二进制文件的情况下,字符串(1)通常有助于获得文件可能的提示

strings /tmp/ics29586 | less

仔细查看输出,看看它是否熟悉.

如果做不到这一点,找出它正在启动的启动作业:

launchctl list|awk '{id=$3; print "### " id; system("launchctl list " id)}'|awk '/^###/ {id=$2} /.*ics29586.*/ {print id}'

这应该以(例如)com.apple.scrod(以及一些您可以忽略的错误)的形式输出一个或多个作业标签.

获得作业标记后,通过运行以下命令获取作业的launchd配置:

launchctl list com.apple.scrod    # insert your tag instead

这个(以及标签本身,通常包含反向表示法的互联网域名)应该为您提供有关此过程的更多信息.如果您需要进一步的帮助,请随时在此处发布.

更新:忘记提及这一点,但由于它是一个jar文件,你可以将它复制到某个地方并解压缩(jar文件实际上只是zip文件)并查看那里有什么类型的Java类.

上一篇:lion – 安装32位Java 7 OpenJDK


下一篇:Java进制转换, 数据类型, 运算符