How to kill a java thread using VisualVM or using a unix command?

后端 未结 8 1106
耶瑟儿~
耶瑟儿~ 2021-01-31 04:30

I m using windows 7 OS. I have around 6 threads in my application. For the purpose of testing the alerts to check the health of the threads, i need to kill the thre

相关标签:
8条回答
  • 2021-01-31 05:28

    There is no safe way to "kill" a thread without killing the process it is in. It not something you would do deliberately. For testing purposes I would add code to your application to support this.

    0 讨论(0)
  • 2021-01-31 05:28

    Dan Woods documented how to kill a thread in this blog entry... https://web.archive.org/web/20160302023213/http://www.rhcedan.com/2010/06/22/killing-a-java-thread The steps he performed involved using a debugger (JDB) and injecting an exception in the thread's execution. Specifically...

    1. Ensure that your java program is started with the following parameters:

      -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

      This will allow us to attach the java debugger to the running process, after we identify which Thread is causing the problem. Also, make sure that you have your iptables setup appropriately so as to only allow connections on 50100 and 50199 from the hosts/workstations that you manage.

    2. Identify the offending thread:
    3. Kill the thread. In this example, the ThreadName is “btpool0-0?. Fire up the java debugger (also shipped with the JDK distribution), and attach to the running JVM…

      [root@host ~]# jdb -attach 50100

    Get a list of the running threads — this will also give us the thread id as the JVM sees it:

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

    The thread id that we’re going to kill is “0x25cb”. The first step of killing the thread is to jump into it, and suspend it…

    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]
    

    Exit the java debugger, and you’re done!

    0 讨论(0)
提交回复
热议问题