Aru*_*run 22 java multithreading
我使用的是Windows 7操作系统.6我的应用程序中有线程.为了测试警报以检查线程的运行状况,我需要手动终止线程并检查警报是否正常工作.我们可以杀死一个线程,就像我们如何用它来杀死一个进程pid?
buz*_*791 37
丹·伍兹在本博客文章中记录了如何杀死一个帖子... https://web.archive.org/web/20160302023213/http://www.rhcedan.com/2010/06/22/killing-a-java -thread 他执行的步骤涉及使用调试器(JDB)并在线程的执行中注入异常.特别...
确保使用以下参数启动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 ,暂停= N
这将允许我们在识别出导致问题的Thread之后将java调试器附加到正在运行的进程.此外,请确保正确设置iptables,以便仅允许来自您管理的主机/工作站的50100和50199上的连接.
杀死线程.在此示例中,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--
Run Code Online (Sandbox Code Playgroud)
我们要杀死的线程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]
Run Code Online (Sandbox Code Playgroud)
退出java调试器,你就完成了!
小智 7
这不是真的.您始终可以使用GDB附加到JVM进程,并在知道线程ID时调用pthread_kill.你只需要从java线程转换(做一个kill -3)转换,它给你一个十六进制id,(本机id),然后查看GDB中的线程列表(信息线程)并找到真正的线程id.
事实证明这是有效的.
| 归档时间: |
|
| 查看次数: |
20889 次 |
| 最近记录: |