gpt4 book ai didi

java - 如何使用 VisualVM 或使用 unix 命令杀死 java 线程?

转载 作者:IT老高 更新时间:2023-10-28 20:36:59 26 4
gpt4 key购买 nike

我正在使用 Windows 7 操作系统。我的应用程序中有大约 6 个线程。为了测试警报以检查线程的健康状况,我需要手动终止线程并检查警报是否正常工作。我们可以像用 pid 杀死一个进程一样杀死一个线程吗?

最佳答案

Dan Woods 在此博客条目中记录了如何杀死线程... https://web.archive.org/web/20160302023213/http://www.rhcedan.com/2010/06/22/killing-a-java-thread他执行的步骤涉及使用调试器 (JDB) 并在线程执行中注入(inject)异常。具体...

  1. 确保使用以下参数启动您的 java 程序:

    -Dcom.sun.management.jmxremote.port=50199
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Xrunjdwp:transport=dt_socket,address=50100,server=y,suspend=n

    这将允许我们将 java 调试器附加到正在运行的进程,之后我们确定是哪个线程导致了问题。另外,请确保你有你的 iptables 设置适当,以便只允许来自您管理的主机/工作站的 50100 和 50199 连接。

  2. 找出有问题的线程:
  3. 杀死线程。在此示例中,ThreadName 为“btpool0-0?”。启动 java 调试器(也随 JDK 发行版一起提供),并附加到正在运行的 JVM……

    [root@host ~]# jdb -attach 50100

获取一个正在运行的线程列表——这也会给我们 JVM 看到的线程 ID:

> threads  
--snip--
(org.mortbay.thread.BoundedThreadPool$PoolThread)0x25cb
btpool0-0 running
--snip--

我们要杀死的线程 id 是“0x25cb”。杀死线程的第一步是跳进去,然后挂起……

thread 0x25cb
btpool0-0[1] suspend 0x25cb
btpool0-0[1] step
Step completed: <... snip ...>
btpool0-0[1] kill 0x25cb new java.lang.Exception()
killing thread: btpool0-0
btpool0-0[1] instance of
com.site.package.name(name='btpool0-0', id=9675) killed btpool0-0[1]

退出java调试器,大功告成!

关于java - 如何使用 VisualVM 或使用 unix 命令杀死 java 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11610902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com