|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢? Java平台尺度版(JavaSE)6,代码名为"Mustang",是最新的JavaSE刊行版本(正在开辟中)。JavaSE6源码和二进制代码都能够在www.Java.net高低载。JavaSE6平台要到2006年秋季才干正式公布。不外,如今你能够下载试用JavaSE6Beta版。
JavaSE6平台中供应了多种可察看性(observability)工具,这个中的很多工具都可在体系中运转,而这些工具中的只要少少数被用于挂起历程或中心复制处置。因而,在本文中,我们将剖析这些可察看性工具在历程上的效果。
1、在JavaSE6平台中的可察看性工具-DTrace
在JavaSE6软件中又引进了很多可察看性改善功效。只管个中年夜多半可合用于一切的平台,可是个中的一些改善仅是特定于Solaris操纵体系(出格针对Solaris10及更高版本)的。在J2SE5.0平台中,引进了一种新的静态跟踪(DTrace)举动――Jstack。正如我们已懂得的,Jstack可以打印夹杂形式仓库跟踪信息(Java和本机C/C++言语是以帧体例显现的)。当从一个给定的Java历程中收回pollsys体系挪用时,以下D剧本将输入对夹杂形式仓库的跟踪信息:
#!/usr/sbin/dtrace-s
syscall::pollsys:entry
/pid==$1/{
/*打印最多50帧*/
jstack(50);
}
上面是下面剧本的运转了局:
libc.so.1`__pollsys+0xa
libc.so.1`poll+0x52
libjvm.so`intos_sleep(longlong,int)+0xb4
libjvm.so`intos::sleep(Thread*,longlong,int)+0x1ce
libjvm.so`JVM_Sleep+0x1bc
java/lang/Thread.sleep
dtest.method3
dtest.method2
dtest.method1
dtest.main
[...篇幅所限,删往了一些输入了局...]
实在,Jstack就是Java可察看性在Solaris10OS及以上版本中的一个很有效的出发点。可是,JavaSE6中远不止这些,它新增添了很多针对Java假造机(JVM)可察看性和Java使用程序可察看性的Dtraceprobe。JavaSE6刊行中增添两种JVM特定的DTrace供应者-hotspot和hotspot_jni。
2、hotspot供应者
hotspot供应者增添了很多探针,它们能够大抵地作以下分类:
・VM性命周期探针-VM启动,封闭事务
・线程性命周期探针-线程启动,中断,等等
・类加载探针-一个Java类加载或卸载
・渣滓搜集探针-GC启动,停止
・办法编译探针-Java字节码-到-本机代码编译("hotspot编译")
・监督器探针-Java监督合作性出口,关照,关照全体,等等
・使用程序探针-Java对象分派,Java办法出口/前往,等等
有关于这些探针的更加具体的信息,请参考KeithMcGuigan的博客。上面是利用这些探针的一些示例。
(一)打印Java线程的称号
hotspot$1:::thread-start{
self->ptr=(char*)copyin(arg0,arg1+1);
self->ptr[arg1]= ;
self->threadname=(string)self->ptr;
printf("Thread%sstarted
",self->threadname);
}
(二)在D剧本中的-verbose:class等价物
你大概已利用过-verbose:classJVM选项。当一个Java类加载或卸载时,这个选项可以使JVM打印一个跟踪动静。上面是利用Dtrace失掉不异了局的情形:
/*当每一个类加载时,打印出其各自的称号*/
hotspot$1:::class-loaded{
self->str_ptr=(char*)copyin(arg0,arg1+1);
self->str_ptr[arg1]= ;
self->name=(string)self->str_ptr;
printf("class%sloaded
",self->name);
}
(三)打印非常中的栈跟踪信息(除夹杂形式)
Throwable.printStackTrace()办法打印一个包括Java帧的仓库跟踪。这个D剧本将打印Java代码,Java本机接口(JNI)代码,C/C++代码和OSC/C++代码的一切的帧-不管什么时候激发一个破例。
hotspot$1:::method-entry{
self->ptr=(char*)copyin(arg1,arg2+1);
self->ptr[arg2]= ;
self->classname=(string)self->ptr;
self->ptr=(char*)copyin(arg3,arg4+1);
self->ptr[arg4]= ;
self->methodname=(string)self->ptr;
}
hotspot$1:::method-entry
/self->classname=="java/lang/Throwable"&&self->methodname=="<init>"/{
jstack();
}
在Java代码中的一切的非常和毛病都间接或直接地派生自java.lang.Throwable,因而一切的非常机关器最初都将挪用java.lang.Throwable的机关器。这个D剧本创建一个办法出口探针-利用一个针对该机关器的过滤器(注重,<init>是机关器办法的外部名)。当挪用这个机关器时,jstack()举动将打印夹杂形式仓库跟踪。
(四)Java堆直方图
我们可使用object-alloc探针来构建一个Java堆直方图,以下所示:
hotspot$1:::object-alloc{
self->str_ptr=(char*)copyin(arg1,arg2+1);
self->str_ptr[arg2]= ;
self->classname=(string)self->str_ptr;
@allocs_count[self->classname]=count();
@allocs_size[self->classname]=sum(arg3);
}
(五)hotspot_jni供应者
JNI同意Java程序与C/C++代码举行交互。假如你想察看Java代码与本机代码的交互,你可使用hotspot_jni供应者。关于每个JNI函数输出/输入而言,这个供应者将表露一个探针。
(六)在Java程序中利用Dtrace的效果
Dtrace被计划为一种临盆形式可察看性体系(未利用时具有零影响)。当撑持探针时,被察看的体系不受影响。
因为年夜部分的由hotspot和hotspot_jni供应者所表露的JVM探针都是轻量级的,因而能够用于临盆呆板中。但是,一些由hotspot供应者所表露的探针请求利用一个特定的命令行选项"-XX:+ExtendedDTraceProbes"来启动JVM。这些探针分离是:Java办法出口/办法前往,对象分派和Java监督器探针。注重,这些探针都请求改动hotspot字节码注释器和hotspot编译器(字节码-到-呆板代码编译器)。即便不被撑持时,这些探针的价值也是对照高贵的。
3、在JavaSE6平台中的可察看性工具
除Dtrace与Java手艺的集成以外,JavaSE6刊行中还包括了很多别的的可察看性工具。上面总结了这些工具,个中还包括一些更加具体的链接申明。
(一)JConsole
JConsole利用JVM的可扩大性Java办理扩大(JMX)工具来供应关于运转于Java平台的使用程序的功能和资本损耗的信息。
在J2SE5.0软件中,你必要启动利用-Dcom.sun.management.jmxremote选项监控的使用程序。注重:在JavaSE6软件中,不再有这一请求。当启动该使用程序时,不必要特定的命令行选项。
在临盆体系中的使用
JConsole启动一个在被察看的Java程序的JVM外部的JMX代办署理。运转别的一部分代码唯一一点极微小的影响-可是影响很小。
别的,只管JConsole在监督当地使用程序的开辟和疾速原型开辟中很有效,但在实践的使用体系中不保举利用。来由是,JConsole自己也损耗大批的体系资本。我们保举的办法是用远程监控来把JConsole使用程序与被监控的体系加以断绝。因而,关于使用体系来讲,以远程形式利用JConsole更好些。关于平安的远程监控来讲,可使用平安选项。
(二)jps
jps相称于Solaris历程工具ps。更多的信息,请参考《jps-JavaVirtualMachineProcessStatusTool》。
不象"pgrepjava"或"ps-ef|grepjava",jps其实不利用使用程序名来查找JVM实例。因而,它查找一切的Java使用程序,包含即便没有利用java实行体的那种(比方,定制的启动器)。别的,jps仅查找以后用户的Java历程,而不是以后体系中的一切历程。
(三)jstat
jstat显现一个丈量(instrumented)JavaHotSpot假造机的功能统计信息(请参考《jstat-JavaVirtualMachineStatisticsMonitoringTool》)。有关于功能计数器的更具体的信息请参考《Codesample-jvmstat3.0》。
(四)jstatd
jstatd是一个Java远程办法挪用(RMI)服务器使用程序-它监控丈量JavaHotSpot假造机的创立和停止而且供应一个接口来同意远程监控工具依靠到运转于当地主机的JVM(请参考《jstatd-VirtualMachinejstatDaemon》)。
在使用体系中的利用
jps及别的jvmstat有用程序都利用极其轻量级的察看机制。由JVM分派一小部分共享内存,而功能计数器也是从这部份内存平分配的。JVM子体系基于其感乐趣的事务更新功能计数器。客户端工具仅仅卖力异步地从共享内存段中举行读取。因而,总的来讲,利用jvmstat举行监控的效果是很小的。
4、JavaSE6平台中针关于Postmortem的可察看性工具
JavaSE6撑持postmortem可察看性工具-它可以从挂起的Java历程或Java中心复制中取得信息。这些工具(除jhat外)都利用Solarislibproc库来依靠到和读取被察看的程序。在察看时代,方针程序被挂起。当Java历程被挂起或当从一个Java历程中产生一个中心复制时,可使用这些工具。在任何大概的情形下,请思索利用gcore来捕捉体系的中心复制的一个快照而且利用任何以下工具"离线"剖析中心复制。
(一)jinfo
jinfo打印一个给定的Java历程或中心文件或一个远程调试服务器的Java设置信息。设置信息包含Java体系属性和JVM命令行标记(更多信息,请参考《jinfo-ConfigurationInfo》)。
(二)jmap
jmap:假如这个工具不利用任何选项(除pid或core选项)运转,那末它显现相似于Solaris的pmap工具所输入的信息。这个工具撑持针对Java堆可察看性的多少别的选项。
在JavaSE6平台中,新到场了一个-dump选项。如许可使jmap可以把Java堆信息复制到一个文件中,然后我们可使用新的jhat命令(见上面一节)来剖析它。
jmap-dump选项其实不利用Solarislibproc来完成及时处置;而是,它运转以后正运转的JVM中的一小段代码,由此来完成堆复制。既然这类堆复制代码运转于JVM外部,那末其速率是对照快的。堆复制的效果大抵相称于完成一次"完整的GC"(对全部堆的渣滓搜集),再加上把该堆的内容写进到文件中。完成堆复制的别的一种大概的思绪是利用gcore来举行中心复制而且运转"jmap-dump"(这与以"离线"体例运转的中心复制构成对比)。
(三)jstack
jstack等价于Solaris的pstack工具。jstack打印一切的Java线程的仓库跟踪信息(可选地包含本机帧信息),请参考《jstack-仓库跟踪》。关于锁和逝世锁的信息也能够被打印,请参考java.util.concurrentlocks。
(四)jsadebugd
jsadebugd依靠到一个Java历程或中心文件而且承当一个调试服务器的感化。远程客户,比方jstack、jmap和jinfo,都可以经由过程JavaRMI依靠到该服务器。
(五)jhat
jhat是一个Java堆复制扫瞄器。这个工具剖析Java堆复制文件(比方,由下面的"jmap-dump"所发生的)。Jhat启动一个同意堆中的对象在web扫瞄器中举行剖析的web服务器。这个工具并非想用于使用体系中而是用于"离线"剖析。"jhat工具是平台自力的",其意义是,它能够被用来察看在任何平台上所发生的堆复制。比方,我们有大概在Linux体系上利用jhat来察看一个在SolarisOS上所发生的堆复制。
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢? |
|