我们正在使用oracle在JBOSS中运行JAVA应用程序。我们使用了Seam和Hibernate框架。我们面临的问题是,当我们启动应用程序服务器时,cpu utlizations增加,一小时后我们发现CPU utilizaiton已关闭到90%。这是奇怪的,我无法确定问题。
请帮助。谢谢。
干杯, Dwarak
答案 0 :(得分:4)
理想情况下,您可以使用分析器来追踪问题。如果您不能在环境中使用分析器(如生产),那么尝试在其他地方重现它并在那里附加分析器。通常这可能很难,所以这里有一个技巧我已经多次使用命令行查找生产中CPU利用率的原因:
watch -n1 'jstack [pid] | grep -A 1 RUNNABLE | grep -v RUNNABLE | grep -v \\-\\- | grep -v socketRead0 | grep -v socketAccept`
如果您在短时间内观看此内容,您可能会看到一些常用方法被调用。接下来将完整的jstack输出抓取到文件:
jstack [pid] > jstack.log
现在在文件中搜索您经常看到的方法之一。从堆栈跟踪中,您通常可以找到负责磨削CPU的代码。如果没有任何显示,那么也许你的时间将过多的垃圾收集,你只需要增加内存。您可以使用:
`jmap -heap [pid]`
更好地了解内存使用情况。更好的是,您可以附加jvisualvm或商业资料分析器(如YourKit),以便随着时间的推移以图形方式查看它。我偶尔也使用watch -n1 'jmap -heap [pid]'
。
答案 1 :(得分:4)
如果上述任何内容都没有帮助,那么最后一种方法是使用分析工具。我建议使用JProfiler或Yourkit Profiler(商业,但可以使用30天的路径),这是非常用户友好的。
答案 2 :(得分:0)
使用分析器查找问题。如果使用Oracle Java 6,请从JDK中的jvisualvm开始。