JVM TI学习(1) 若何中止weblogic中stuck thread[Java编程]
本文“JVM TI学习(1) 若何中止weblogic中stuck thread[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
JPDA(Java Platform Debugger Architecture)是sun推出的一套工具接口,有了这些接口,debugger、profile工具可以attach到target JVM,进而可以监控、调试我们的程序.JPDA包含三部份:JVM TI, JDI, JDWP.TI可以利用native语言,通过调用jvmti.c供应的系列库函数,实现debug工作,而JDI是TI面向Java开辟人员供应的高层开辟接口.TI替换了早期的DI,每个版本都做了一定的功效加强.随着JDK的发展,JPDA变得越发强盛,比方thread信息查抄、method调用跟踪、memory walk-through、perm内存区查抄等,有了这些接口,我们完好可以自己造出近似于:jhat、jmap、jstack、jconsole这样的车子.用一句过期话来说:JPDA,很好很强盛.
在Weblogic中,我们普通能看到像下面这样的告诫信息:
BEA-000337 Feb 1, 2007 11:01:05 AM EST Error WebLogicServer ExecuteThread: '14' for queue: 'weblogic.kernel.Default' has been busy for "72" seconds working on the request "connection82.session95", which is more than the configured time (StuckThreadMaxTime) of "60" seconds.
这样的信息只是一个提醒,奉告终究用户某个履行线程履行了多长时间(只有履行时间超越StuckThread-MaxTime,默许600秒),用户可以按照这些信息,解析对应的恳求履行了这么长时间能否正常,假如在预期或可以承受范围内,不用作任何干涉,不然我们需求借助于thread dump解析履行时间的瓶颈.呈现这样的告诫信息,weblogic不会对这样的线程作任何操作(weblogic无法辨认这么长的履行时间是不是用户所预期的,比方报表操作、文件传输等本身大概就很耗时),直到线程完毕.线程能履行完毕还好,假如是死锁呢?这样的线程会一向被挂着,直到weblogic重启.重启关于很多生产系统而言是最后的挑选,那么我们有什么办法来避免重启呢? Weblogic9今后,线程管理方面work manager替换了早期的thread pool,并且work manager供应了stuck thread的管理,比方呈现几个stuck thread后,我们可以要求work manager终止利用,避免更多的线程被stuck.weblogic终止利用只是不供应服务,但还是不会影响正在履行的线程.
曾经不止一次的被客户问道我们可否中止这样的线程,从weblogic层面来看,这是mission impossible.目前有了TI,我们可以通过它中止这样的线程.
要中止这样的线程,首先要借助thread dump拿到线程名,我们将以线程名为filter.Thread dump信息以下:
"[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=6 tid=0x2b25a800 nid=0x3c0 waiting on condition [0x2e08f000..0x2e08fa14]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
......
上面这个线程的名字就是:[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'
为了能精确的attach上JVM,启动的时刻需求加上以下的JAVA_OPTIONS,
-Xdebug -Xrunjdwp:transport=dt_socket,address=9191,server=y,suspend=n
目前我们便可以下面的办法attach到target JVM,
1 private VirtualMachine connectVM(){
2 VirtualMachineManager vmm = Bootstrap.virtualMachineManager();
3 List connectors = vmm.attachingConnectors();
4 Connector conn = null;
5 AttachingConnector socketAttachingConnector = null;
6 /*
7 * host and port should be set here
8 */
9.
10 try{
11 vm = socketAttachingConnector.attach(arguments);
12 }catch(Exception e){
13 e.printStackTrace();
14 }
15 return this.vm;
16 }
以上是“JVM TI学习(1) 若何中止weblogic中stuck thread[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |