Java Bizzare线程块创建基本数组

Java Bizzare线程块创建基本数组,java,thread-safety,deadlock,blocking,resin,Java,Thread Safety,Deadlock,Blocking,Resin,我们最近遇到了一个情况,一台生产机器由于大量线程转储而崩溃。它是树脂Web服务器,它提供了“全线程转储Java热点(TM)64位服务器VM(14.0-b16混合模式):” 有很多被阻塞的线程,但它们让我感到困惑。也就是说,一个是: "resin-8576" daemon prio=10 tid=0x00007f871827b800 nid=0x6b5 waiting for monitor entry [0x00007f864a7e6000] java.lang.Thread.State:

我们最近遇到了一个情况,一台生产机器由于大量线程转储而崩溃。它是树脂Web服务器,它提供了“全线程转储Java热点(TM)64位服务器VM(14.0-b16混合模式):”

有很多被阻塞的线程,但它们让我感到困惑。也就是说,一个是:

"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

听起来这个方法可能会被称为很多,并产生大量垃圾。当GC运行这些方法时,whcih allocate对象可能在等待GC时被阻塞

我会尝试一个更先进的JVM。e、 g.Java 6更新24(具有JVM构建19或20),因为您似乎有一个较旧的JVM。

它会阻塞“new”(新建),因此这可能是由内部内存管理或垃圾收集器引起的。可能是内存不足(不会抛出内存不足异常)。