【发布时间】:2013-09-20 06:25:34
【问题描述】:
我有一个 Java 程序,它有时会同时进入 100% 的 CPU 使用率和睡眠状态。该程序不是多线程的。
环顾四周,我认为最有可能的原因是我运行 Java 解释器的垃圾收集方式存在错误或不匹配。我只能认为100%的CPU使用率是因为GC。我正在为程序分配足够的内存以使用 Xmx 运行,并且即使接近我分配的数量,该程序也不会运行。我分配的内存量也远小于机器上可用的总内存。
我发现了这个:
http://code.google.com/p/spymemcached/issues/detail?id=279
stackoverflow.com 上也有一些提及,例如:
CMS garbage collector - when does it run?
不过,我还是找不到解决方案。这是 JVM 中的一个错误,如果是,我将如何修复它?
编辑: 我在这里添加了 jstack 输出的粘贴:http://pastebin.com/Au0V9FCN
【问题讨论】:
-
使用
jstack获取堆栈转储以查看那里发生了什么。一段时间后 100% 的使用率会下降吗? -
然后获取 jstack 输出。
-
你能用一个可以在你的帖子中展示的简单程序重现这个问题吗?你是否监控 GC(使用 verbose:gc)?
-
如果你停止程序执行,cpu 是否会在正常性能下下降?
-
那么看起来你的代码有问题。那是一个不再移动的应用程序线程,对吧?
标签: java performance garbage-collection