小女巫 发表于 2015-1-18 11:24:19

了解下JAVA的JVM TI进修(1) 怎样中止weblogic中stuck thread

多谢指点,其实我对.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信息以下:
" ExecuteThread: 2 for queue: weblogic.kernel.Default (self-tuning)" daemon prio=6 tid=0x2b25a800 nid=0x3c0 waiting on condition 
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
......
下面这个线程的名字就是: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上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。

仓酷云 发表于 2015-1-20 23:54:13

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能

谁可相欹 发表于 2015-1-22 14:52:24

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

灵魂腐蚀 发表于 2015-1-25 18:06:09

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

飘飘悠悠 发表于 2015-1-29 18:16:23

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

柔情似水 发表于 2015-1-30 05:56:21

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

乐观 发表于 2015-2-4 02:09:13

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

分手快乐 发表于 2015-2-9 10:53:25

是一种突破用户端机器环境和CPU

简单生活 发表于 2015-2-26 08:40:28

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

兰色精灵 发表于 2015-3-4 01:06:17

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

小魔女 发表于 2015-3-6 20:28:17

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

透明 发表于 2015-3-13 08:09:50

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

老尸 发表于 2015-3-13 08:09:50

是一种突破用户端机器环境和CPU

蒙在股里 发表于 2015-3-20 17:19:53

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
页: [1]
查看完整版本: 了解下JAVA的JVM TI进修(1) 怎样中止weblogic中stuck thread