JVM占用一个CPU的100%

时间:2013-10-07 12:07:22

标签: java scala jvm ubuntu-12.04 finagle

我们有一个在Ubuntu Server 12.04和java上运行的应用程序。

java -version返回:

  

java版“1.7.0_40”

     

Java(TM)SE运行时环境(版本1.7.0_40-b43)

     

Java HotSpot(TM)64位服务器VM(内置24.0-b56,混合模式

我们有其他应用程序使用相同的技术,但没有问题。

服务器信息: RAM:2G 操作系统:Ubuntu Server 12.04 CPU的Nb:2

应用程序语言是scala。

运行一段时间后,JVM似乎在睡觉。一个CPU继续以100%旋转。

JVM选项:

  

-Xms1g -Xmx1g -XX:+ HeapDumpOnOutOfMemoryError -XX:+ UseParNewGC -XX:+ UseConcMarkSweepGC -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps -XX:+ PrintTenuringDistribution -XX:-DisableExplicitGC -XX:CMSFullGCsBeforeCompaction = 1 -XX :+ CMSClassUnloadingEnabled -XX:+ CMSIncrementalMode -XX:MaxGCPauseMillis = 1500 -XX:GCTimeRatio = 9 -XX:CMSInitiatingOccupancyFraction = 50 -XX:-UseGCOverheadLimit -XX:MaxHeapFreeRatio = 60

使用jstat -gcutil [PID],我看到FGC快速增长。

你对这个问题有所了解吗?

由于

1 个答案:

答案 0 :(得分:0)

  

你对这个问题有所了解吗?

它可以是任何数量的东西。但是(IMO)最可能的解释是你的应用程序中有一个错误表现为无限循环。

将调试器附加到JVM。或者,如果您不能这样做,请向它发送必要的信号,以使其生成到控制台输出流的线程转储。然后分析转储,看看你是否能得到任何线索。

这不是我们可以给你一个神奇答案的问题。根据您对应用程序的了解以及您在分析/调试方面的辛勤工作,您很可能需要自己解决这个问题。 (事实上​​,这是Scala意味着这也可能是Scala编译器或运行时中的错误。)