Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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应用程序创建多个名为“的线程?”;JMX客户端心跳信号“;哪些是消耗大量CPU的?_Java - Fatal编程技术网

为什么我的java应用程序创建多个名为“的线程?”;JMX客户端心跳信号“;哪些是消耗大量CPU的?

为什么我的java应用程序创建多个名为“的线程?”;JMX客户端心跳信号“;哪些是消耗大量CPU的?,java,Java,我有一个从远程系统检索MBean的java应用程序。然而,它消耗了大量的CPU。当我在占用大量CPU的线程PID上运行jstack时,我看到: JMX client heartbeat 148145" #229748 daemon prio=5 os_prio=0 tid=0x00007fe3c2f46800 nid=0x56fc waiting on condition [0x00007fe1d267f000] java.lang.Thread.State: TIMED_WAITING

我有一个从远程系统检索MBean的java应用程序。然而,它消耗了大量的CPU。当我在占用大量CPU的线程PID上运行jstack时,我看到:

JMX client heartbeat 148145" #229748 daemon prio=5 os_prio=0 tid=0x00007fe3c2f46800 nid=0x56fc waiting on condition [0x00007fe1d267f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker.run(ClientCommunicatorAdmin.java:175)
        at java.lang.Thread.run(Thread.java:745)

"JMX client heartbeat 148039" #229615 daemon prio=5 os_prio=0 tid=0x00007fe398317800 nid=0x564a waiting on condition [0x00007fe1d48a1000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker.run(ClientCommunicatorAdmin.java:175)
        at java.lang.Thread.run(Thread.java:745)

"JMX client heartbeat 148036" #229612 daemon prio=5 os_prio=0 tid=0x00007fe3903a4000 nid=0x5647 waiting on condition [0x00007fe1d49a2000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker.run(ClientCommunicatorAdmin.java:175)
        at java.lang.Thread.run(Thread.java:745)

"JMX client heartbeat 147959" #229517 daemon prio=5 os_prio=0 tid=0x00007fe3e09e3000 nid=0x55e7 waiting on condition [0x00007fe1d62bb000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker.run(ClientCommunicatorAdmin.java:175)
        at java.lang.Thread.run(Thread.java:745)

"JMX client heartbeat 147854" #229385 daemon prio=5 os_prio=0 tid=0x00007fe3f551e000 nid=0x5562 waiting on condition [0x00007fe1d83dc000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker.run(ClientCommunicatorAdmin.java:175)
        at java.lang.Thread.run(Thread.java:745)

我不知道这个线程是什么,也不知道我的应用程序的哪个部分创建了它。

听起来好像你没有关闭你打开的连接,导致等待超时

最佳做法是在获得结果后立即明确关闭所有连接


请注意,如果您是
尝试
/
捕获
-ing异常等,并且没有做很多工作,则可能无法获取关闭连接的代码,因此,最后检查是否有任何连接在方法末尾或连接打开时所处的任何控制结构正确打开和关闭。

是否关闭所有打开的连接?@Ivan我检查并找到了一个方法,在该方法中,我打开了一个未关闭的JMXConnector对象。我每周一次调用该方法30秒,我需要最新的JMX数据。您能告诉我处理JMXconnector的最佳方法是什么吗?