2011-03-24 32 views
4

我们最近有一种情况,生产计算机因大量线程转储而关闭。它是树脂网络服务器,它给了'全线程转储Java HotSpot(TM)64位服务器虚拟机(14.0-b16混合模式):'。Bizzare线程块创建原始数组

有大量的BLOCKED线程,但它们让我感到困惑。即,一个是这样的:

"resin-8576" daemon prio=10 tid=0x00007f871827b800 nid=0x6b5 waiting for monitor entry [0x00007f864a7e6000] 
    java.lang.Thread.State: BLOCKED (on object monitor) 
     at java.lang.String.toCharArray(String.java:2725) 
     at java.lang.Thread.setName(Thread.java:1051) 
     at com.caucho.server.port.TcpConnection.run(TcpConnection.java:605) 
     at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:730) 
     at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:649) 
     at java.lang.Thread.run(Thread.java:619) 

的代码有

char result[] = new char[count]; 

另一个是像

"resin-8574" daemon prio=10 tid=0x00007f8718277800 nid=0x6b3 waiting for monitor entry [0x00007f864a9e8000] 
    java.lang.Thread.State: BLOCKED (on object monitor) 
     at java.lang.String.valueOf(String.java:2840) 
     at java.lang.Thread.getName(Thread.java:1061) 
     at com.caucho.server.port.TcpConnection.run(TcpConnection.java:603) 
     at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:730) 
     at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:649) 
     at java.lang.Thread.run(Thread.java:619) 

凡串的码有

return new String(data); 

那些看起来像被阻挡的陌生地方。

任何人都可以提出一个原因,这些电话会被阻止?

感谢, -kal

+0

它阻塞“新”,所以这可能是由内部内存管理或垃圾收集器造成的。这可能是因为内存不足(内存不足异常不会引发延迟)。 – josefx 2011-03-24 17:16:32

回答

2

这听起来像这种方法可以称为很多,并产生大量的垃圾。当GC运行这些方法时,分配对象在等待GC时可能显示为阻塞。

我会尝试更新的JVM。例如Java 6更新24(具有JVM版本19或20),因为您似乎拥有较旧的JVM。