java – Bizzare线程块创建原始数组
作者:互联网
我们最近遇到了生产机器出现大量线程转储的情况.它是树脂网络服务器,它给出了’全线程转储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);
那些看似奇怪的地方被封锁了.
任何人都可以提出这些电话会阻塞的原因吗?
谢谢,
-kal
解决方法:
听起来这个方法可能被称为很多并产生大量垃圾.当GC运行这些方法时,分配对象在等待GC时似乎是阻塞的.
我会尝试更新的JVM.例如Java 6更新24(其中包含JVM内部版本19或20),因为您似乎拥有较旧的JVM.
标签:java,thread-safety,deadlock,blocking,resin 来源: https://codeday.me/bug/20190704/1381700.html