当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • JVM(Java虚拟机)详解
  • 关于JVM号令行标志您不知道的5件事:调优JVM性能和Java运行时
  • 扩大Axis2框架,支持基于JVM的脚本语言
  • Java理论与实践: JVM 1.4.1中的垃圾堆积
  • JVM TI学习(1) 若何中止weblogic中stuck thread
  • JVM TI学习(2) 若何动态更新JVM中的class文件
  • JVM(Java虚拟机)中进程工作目录讲授
  • 关于JVM的垃圾堆积(一)
  • 关于JVM的垃圾堆积(二)
  • 关于JVM的垃圾堆积(三)
  • 摸索JVM上的LISP
  • 操纵JRuby生成JVM代码
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .