4

我们最近遇到了一种情况,生产机器因大量线程转储而停机。它是树脂网络服务器,它提供了“全线程转储 Java HotSpot(TM) 64 位服务器 VM(14.0-b16 混合模式):”。

有很多 BLOCKED 线程,但它们让我感到困惑。IE,一个是这样的:

"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)

String 的代码在哪里

return new String(data);

那些看起来像是被封锁的奇怪地方。

任何人都可以提出这些电话会被阻止的原因吗?

谢谢,-卡尔

4

1 回答 1

2

听起来这个方法可以被大量调用并产生大量垃圾。当 GC 运行时,这些分配对象的方法在等待 GC 时可能会出现阻塞。

我会尝试更新的JVM。例如Java 6 update 24(它有JVM build 19 或20),因为你似乎有一个较旧的JVM。

于 2011-03-24T17:13:40.573 回答