|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
多谢指点,其实我对.net网页编程和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。
JPDA(JavaPlatformDebuggerArchitecture)是sun推出的一套工具接口,有了这些接口,debugger、profile工具能够attach到targetJVM,进而能够监控、调试我们的程序。JPDA包含三部分:JVMTI,JDI,JDWP。TI可使用native言语,经由过程挪用jvmti.c供应的系列库函数,完成debug事情,而JDI是TI面向Java开辟职员供应的高层开辟接口。TI取代了初期的DI,每一个版本都做了必定的功效加强。跟着JDK的开展,JPDA变得更加壮大,好比thread信息反省、method挪用跟踪、memorywalk-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秒),用户能够依据这些信息,剖析对应的哀求实行了这么长工夫是不是一般,假如在预期或能够承受局限内,不必作任何关预,不然我们必要借助于threaddump剖析实行工夫的瓶颈。呈现如许的告诫信息,weblogic不会对如许的线程作任何操纵(weblogic没法辨认这么长的实行工夫是否是用户所预期的,好比报表操纵、文件传输等自己大概就很耗时),直到线程停止。线程能实行停止还好,假如是逝世锁呢?如许的线程会一向被挂着,直到weblogic重启。重启关于良多临盆体系而言是最初的选择,那末我们有甚么办法来制止重启呢?Weblogic9今后,线程办理方面workmanager取代了初期的threadpool,并且workmanager供应了stuckthread的办理,好比呈现几个stuckthread后,我们能够请求workmanager中断使用,制止更多的线程被stuck。weblogic中断使用只是不供应服务,但仍是不会影响正在实行的线程。
已经不止一次的被客户问道我们可否中止如许的线程,从weblogic层面来看,这是missionimpossible。如今有了TI,我们能够经由过程它中止如许的线程。
要中止如许的线程,起首要借助threaddump拿到线程名,我们将以线程名为filter。Threaddump信息以下:
"[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:2forqueue:weblogic.kernel.Default(self-tuning)
为了能准确的attach上JVM,启动的时分必要加上以下的JAVA_OPTIONS,
-Xdebug-Xrunjdwp:transport=dt_socket,address=9191,server=y,suspend=n
如今我们就能够上面的办法attach到targetJVM,
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 }
<p>
前些天,在CSDN上看到了一个消息,说是net网页编程网页编程AJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。 |
|