Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含处于可运行状态且没有堆栈的线程的线程转储_Java_Multithreading_Performance_Jboss7.x_Virtual Machine - Fatal编程技术网

Java 包含处于可运行状态且没有堆栈的线程的线程转储

Java 包含处于可运行状态且没有堆栈的线程的线程转储,java,multithreading,performance,jboss7.x,virtual-machine,Java,Multithreading,Performance,Jboss7.x,Virtual Machine,在使用CPU的高负载应用程序上执行线程转储时,我看到很多线程处于这种状态: “ajp执行器线程-XXXXXX”优先级=10 tid=0x00002b04b8b33801 nid=0x5327可运行[0x0000000000000000] java.lang.Thread.State:可运行 对我来说,真正奇怪的是根本没有stacktrace,ajp线程的总数高于配置的最大线程数 当应用程序在以下位置上运行时,会发生这种情况: JBoss7 Java 7u75 红帽5.11 在VMWare En

在使用CPU的高负载应用程序上执行线程转储时,我看到很多线程处于这种状态:

“ajp执行器线程-XXXXXX”优先级=10 tid=0x00002b04b8b33801 nid=0x5327可运行[0x0000000000000000] java.lang.Thread.State:可运行

对我来说,真正奇怪的是根本没有stacktrace,ajp线程的总数高于配置的最大线程数

当应用程序在以下位置上运行时,会发生这种情况:

  • JBoss7
  • Java 7u75
  • 红帽5.11
  • 在VMWare Enterprise/vSphere 5.5上运行
执行器的配置为:

 <subsystem xmlns="urn:jboss:domain:threads:1.1">
        <bounded-queue-thread-pool name="ajp-executor">
            <core-threads count="32"/>
            <queue-length count="1"/>
            <max-threads count="300"/>
            <keepalive-time time="5" unit="seconds"/>
        </bounded-queue-thread-pool>
    </subsystem>

请注意,此主机上的负载非常高:

  • CPU达到70%

  • 负载为4(=vCPU的数量)

注意:这些线程不是空闲线程,因为空闲线程具有以下堆栈跟踪:

 "Reference Handler" daemon prio=5 tid=0x00007f92cb00e800 nid=0x3703 in Object.wait() [0x000000012057e000]
     java.lang.Thread.State: WAITING (on object monitor)
     at java.lang.Object.wait(Native Method)
     - waiting on <0x00000007aaa84470> (a java.lang.ref.Reference$Lock)
     at java.lang.Object.wait(Object.java:503)
     at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
     - locked <0x00000007aaa84470> (a java.lang.ref.Reference$Lock)
对象中的“引用处理程序”守护程序prio=5 tid=0x00007f92cb00e800 nid=0x3703.wait()[0x000000012057e000]
java.lang.Thread.State:正在等待(在对象监视器上)
在java.lang.Object.wait(本机方法)
-等待(java.lang.ref.Reference$Lock)
等待(Object.java:503)
在java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
-锁定(一个java.lang.ref.Reference$Lock)

这些是AJP executor连接池中的空闲线程。您已将核心线程设置为32,这意味着池将始终在连接池中维护32个线程,尽管它们可能处于空闲状态。通过您的配置,您最多可以看到300个线程,但是任何超过32个的线程在死亡并从连接池中删除之前只需等待5秒钟

至于CPU负载,我怀疑它与这些空闲连接池线程有任何关系


有关连接池和保持活动状态的更多信息,请参见John Skeet的回答:

这些是AJP executor连接池中的空闲线程。您已将核心线程设置为32,这意味着池将始终在连接池中维护32个线程,尽管它们可能处于空闲状态。通过您的配置,您最多可以看到300个线程,但是任何超过32个的线程在死亡并从连接池中删除之前只需等待5秒钟

至于CPU负载,我怀疑它与这些空闲连接池线程有任何关系


有关连接池和保持活动状态的更多信息,请参见John Skeet的回答:

进一步分析后,我发现问题是由于通过以下方式启用了远程调试:

-Xrunjdwp:transport=dt_套接字,server=y,suspend=n,address=XXXXXXX


这解释了线程转储中这些奇怪的空堆栈跟踪。

进一步分析后,我发现问题是由于通过以下方式启用远程调试造成的:

-Xrunjdwp:transport=dt_套接字,server=y,suspend=n,address=XXXXXXX


这就解释了线程转储中这些奇怪的空堆栈跟踪。

我认为AJP Executor连接池中的空闲线程没有这种堆栈跟踪。您发布堆栈跟踪了吗?你发布了一堆你的帖子。空闲线程还没有堆栈跟踪,所以不确定您在寻找什么。考虑到你的问题,我的回答不准确吗?您列出的线程是一个空闲的ajp执行器线程,在给定配置的情况下,您会看到很多线程。如果您希望有人对您的性能问题进行分类,那么您的问题非常不清楚,可能不会在StackOverflow上得到回答。首先感谢您的回答。很抱歉,但在我的问题中,我发布了一个来自线程转储的stacktrace。我向你确认这不是一个空闲线程。我发布了这个问题,因为在调查了一段时间后我真的不知道,然后我自己发现并分享了答案。无论如何,再次感谢你,很抱歉第一次没有这么说。我对你的答案投了反对票,因为在这个特殊的情况下,你的答案对我来说是错误的,但我对你的一些答案投了赞成票,这些答案在我看来还行。祝您愉快我不认为AJP Executor连接池中的空闲线程有这种stacktraceDid您发布了堆栈跟踪吗?你发布了一堆你的帖子。空闲线程还没有堆栈跟踪,所以不确定您在寻找什么。考虑到你的问题,我的回答不准确吗?您列出的线程是一个空闲的ajp执行器线程,在给定配置的情况下,您会看到很多线程。如果您希望有人对您的性能问题进行分类,那么您的问题非常不清楚,可能不会在StackOverflow上得到回答。首先感谢您的回答。很抱歉,但在我的问题中,我发布了一个来自线程转储的stacktrace。我向你确认这不是一个空闲线程。我发布了这个问题,因为在调查了一段时间后我真的不知道,然后我自己发现并分享了答案。无论如何,再次感谢你,很抱歉第一次没有这么说。我对你的答案投了反对票,因为在这个特殊的情况下,你的答案对我来说是错误的,但我对你的一些答案投了赞成票,这些答案在我看来还行。祝您今天过得愉快