JProfiler与tomcat整合.ppt_第1页
JProfiler与tomcat整合.ppt_第2页
JProfiler与tomcat整合.ppt_第3页
JProfiler与tomcat整合.ppt_第4页
JProfiler与tomcat整合.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JProfiler与Tomcat整合简介,-benson,一、JProfiler介绍,JProfiler是德国ej-technologies公司开发的一款全功能的JAVA剖析工具,主要用于检查和跟踪(仅限JAVA开发的)系统性能。JProfiler可以通过实时监控系统的内存使用情况,通过监视垃圾回收、线程运行状况等手段,监视JVM运行情况及其性能。它把CPU、线程和内存的剖析组合在一个强大的应用中,直观的视图界面对定位性能瓶颈、确定内存泄露、解决线程问题提供了便利。,获取Jprofiler它不是免费的软件,值得庆幸的是,它有10天试用版本,10天分析一个问题,肯定绰绰有余了。官方下载地址:(http:/www.ej-,二、Jprofiler与Tomcat整合的安装配置过程,安装准备下载Jprofiler6.0.3由于客户端、服务端均是windows操作系统,都安装windows版本的jprofiler6.0.3。客户端配置1、按”SHIFT+F1”打开”QuickStart”对话框,选择“Anapplicationserver,locallyorremotely”,然后“Next”。2、配置服务中间件类型,我用的是tomcat5.5.23,所有选择”ApacheTomcat5.x”,然后点击Next。3、选择“Onaremotecomputer”,再选择“WindowsX86/ADM64”(默认),Next。4、选择JVM版本,”JVMVendor”选择”Sun”,”Version”选择“1.5.0”,“mode”默认,Next。,5、选择启动方式,选择:waitforaconnectionfromthejprofilerGUI,Next。6、输入远程服务器IP地址,我这里是:Remoteaddress36,Next。7、输入被监控机器中Jprofiler安装位置(如:C:ProgramFilesjprofiler6),点击Next。8、选择所集成的应用服务器启动脚本,(如:Tomcat在windows下常用的启动脚本是Startup.bat)Jprofiler会自动在相同目录下生成Jprofiler专用启动脚本(strartup_jprofiler.bat),如果脚本是远程的,必须有远程计算机的磁盘可写权限,或者将启动脚本拷贝到本地。点击Next。9、选择远程服务器的代理监听端口,如:JProfilerport:8849default。10、列出配置过程的信息内容,阅读确认修改信息无误后,点击Next。11、完成配置,选择“No,Iwillstartthesessionlater”,Finish。,服务端配置服务器端的Tomcat-bin目录最好设置可写权限,远程客户端建立映射。当客户端和服务器的安装配置版本均一致时,可以直接将监控器端生成的strartup_jprofiler.bat拷贝到服务器的Tomcat-bin目录下使用;若不一致,最好在服务器端配置本地session,生成自己的启动脚本strartup_jprofiler.bat。启动分析1、在服务器端启动strartup_jprofiler.bat,提示等待连接信息;2、在监控端,启动之前配置好的session。,注:如果远程安装不成功请检查:1、本地和被监控机是否都安装了Jprofiler,版本是否一致。2、本地和被监控机的端口是否一致,最好都使用默认的8849.3、所选的JVM提供商和版本是否正确,可能服务器上安装了多个JAVA版本,一定要选择应用程序启动时所用的。4、检查远程连接是否畅通,应用目录必须可写共享,监控机器需要映射共享目录,配置完成后在本地服务器上会生产监控的启动文件。,5、检查服务器端的tomcat端口是否已经占用。注:可以使用这些命令解决端口被占用问题:Cmd-netstatano|findstr8080(查看开放的端口)Tasklist|findstr“8080”(查找指定端口的应用程序)Ntsdcqp“PID”(终止进程)6、使用的试用版license是否过期。Jprofiler可以与Websphere、Weblogic、JBoss等中间件整合,配置过程基本类似。,三、Jprofiler监测视图,内存剖析(Memoryprofiler)JProfiler的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。所有对象(AllObjects)显示所有加载的类的列表和在堆上分配的实例数.只有JAVA1.5才会显示此视图。要查看特定时间段对象的分配,并记录分配的调用堆栈,使用“记录的对象视图”。列表中显示的大小:显示所有分配实际的总大小,只包括相应的指针的大小,不包含引用数组和实例的大小。以字节显示。只包括类使用的JVM大小,也不包含类数据和本地变量大小。,记录对象(Recordobjects)显示类或所有已记录对象和数组的列表,包括堆上分配的实例数。只有已记录的对象在此视图中显示。如果选择了某个包或类,你可以从记录对象视图跳转到分配调用树和分配热点,方法是右键点击,选择要跳转的视图。分配访问树(Allocationcalltree)显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。分配热点(Allocationhotspots)分配热点视图显示所选类的对象被分配在哪儿的方法列表。分配到至少占总数1%的方法才会被显示。方法可以根据actionfiltersets设置进行过滤。此视图与CPU视图中的hotspotsview视图有些类似,只是显示的是分配的类的实例数和数组而不是时间度量。,堆遍历(Heapwalker)堆遍历器有五个视图:类Classes显示所有类和它们的实例。分配Allocations为所有记录对象显示分配树和分配热点。索引References为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。数据Data为单个对象显示实例和类数据。时间Time显示一个对已记录对象的解决时间的柱状图。,CPU剖析(CPUprofiler)JProfiler提供不同的方法来记录访问树以优化性能和细节。线程或者线程组以及线程状况可以被所有的视图选择。所有的视图都可以聚集到方法、类、包或J2EE组件等不同层上。CPU视图部分包括:访问树Calltree显示一个积累的自顶向下的树,树中包含所有在JVM中已记录的访问队列。请求树可以根据Servlet和JSP对URL的不同需要进行拆分。Jprofiler自动检测J2EE组件并在调用树中显示相关的节点。使用不同的图标显示不同的J2EE组件类型:Servlets:黄色倒心形JSPs:蓝色倒心形EJBs:红色倒心形热点Hotspots显示消耗时间最多的方法的列表。对每个热点都能够显示回溯树。该热点可以按照方法请求,JDBC,JMS和JNDI服务请求以及按照URL请求来进行计算。访问图Callgraph静态的显示所选择节点计算出线程调用图。节点可以为方法、类、包或J2EE组件。,线程剖析Threadprofiler对线程剖析,JProfiler提供以下视图:线程历史Threadhistory按照线程开始的顺序显示JVM中所有线程状态的详细历史信息。在线程图的左边固定显示线程名,其它部分是滚动度量工具,在水平轴上显示时间。时间轴的开始时间与JVM的第一个线程的时间保持一致。每个活动的线程用带颜色的线标明,从线程开始到线程结束。绿色:表明线程正在运行并能接收CPU时间。不表明线程正在消耗CPU时间,只表明线程准备运行并没有阻塞或睡眠。线程被分配了多少CPU时间,依赖于不同的其他因素,如:总的系统负载;线程优先级和调度的运算法则。橙色:表示线程在等待,线程正在睡眠并等待计时器或其他线程唤醒。红色:表示线程阻塞。线程尝试进入同步代码区或由其他线程控制的同步方法。蓝色:表示线程在NetI/O操作,线程在等待java库的网络操作完成。在线程监听socket连接或者等待读写数据到socket中时,会产生这种状态。,线程监控Threadmonitor显示当前运行的线程列表以及相关的时间和状态信息。如果监控的是java1.5或以上的版本,在屏幕的上半部分就显示上面的表,屏蔽的下半部分显示所选线程的线程创建堆栈跟踪。堆栈跟踪只有线程创建时记录CPU数据才会显示。死锁探测图表DeadlockDetection显示一个包含了所有在JVM里的死锁图表。正常的状态如果没有死锁就显示”NOdeadlocksdetected”。目前使用的监测器Currentmonitoruseage显示目前使用的监测器并且包括它们的关联线程。历史检测记录Historyusagehistory显示重大的等待事件和阻塞事件的历史记录。监测使用状态Monitorusagestatistics显示分组监测,线程和监测类的统计监测数据。,VM遥感勘测技术VMtelemetry观察JVM的内部状态,JProfiler提供了不同的遥感勘测视图,如下所示:堆Heap显示一个堆的使用状况和堆尺寸大小活动时间表。记录的对象Recordedobjects显示堆上对象的总数,分为数组和非数组。可以显示线性图和区域图。垃圾回收Garbagecollector显示垃圾回收活动,包括对象释放的一条线和对象移动的一条线。只显示已记录的对象,未记录的对象此视图不显示。类Classes显示JVM调用的类的总和,分为过滤类和非过滤类。线程Threads显示JVM中活着的线程总数,分为活动和不活动的线程。,使用介绍1、视图导出视图导出可以生成xml文件。2、设置查看源码和字节码查看源代码,需要在Session-GeneralSetting-DefaultJavaFilePath下的SourcePath中设定源代码路径,设定后要重启Jprofiler。查看字节码,需要在Session-GeneralSetting-DefaultJavaFilePath下的ClassPath中设定发布的类的路径,设定后要重启Jprofiler。注:有些版本在建立session时有此选择项,配置完重启jprofiler仍无法查看源码,则需要集成到IDE中才可以查看源代码。,在新窗口中比较快照当前的视图可以保存下来,选择session-save,或使用快捷键ctrl+s多个快照可以进行对比。选择CompareSnapshotsinnewwindows,打开新窗口。默认左侧列出可用的快照,可以根据需要选择进行对比。IDE集成当Jprofiler与IDE(eclipse)集成后,不需要配置sessin,可以直接在IDE中调用。Jprofiler集成不能在eclipse部分安装情况下使用。安装前关闭eclipse,按照安装向导进行。安装完成后,打开eclipse,查看javaperspective中是否存在run-profiler,不存在,请在windows-customizeperspective中,在command标签中的”profiler”选项前打勾。重启后可以看到如图:,四、实例操作,编写两个测试JSP页面。testMemory.jsp、testThread.jsp配置监控环境。此处配置本地Tomcat监控。观察视图变化。测试结论。,1、Jprofiler监控要占用一定系统资源,所以一般情况下不要用于性能测试。对被监控的应用,为了获取实时更新视图,可以给予应用一定的负载。在相对比较大的压力情况下,可以只打开常用的监控项,如内存、CPU、线程的监控。可以查看内存、CPU分配热点,以及监控对象数量。如图:,实际应用中,当前对象数量监控很常用。如果你的程序中使用了单例模式,那么你只会看见一个对象存在,如果存在多个则说明程序问题所在了。同样,如应用进行一系列的操作后,检查一下该销毁的对象是否还存在,若没有释放则可能内存产生了溢出。针对某个未释放掉的对象可以查看哪些实例在引用它,找出溢出点。具体操作:在“MemoryViews”右键选中该对象,选择”TakeHeapSnapshotsforselection”选择完成后进入”HeapWalker”界面,选择”References”即可,如图:,Jprofiler提供了不同观察粒度,提供对类、包、J2EE组件的监控,同时可以结合过滤器直接定位你关注的包或类。Jprofiler监控有些视图刷新与应用存在一定时间差,需要等待刷新,才能看到实际监控情况。线程视图可以查看到哪些线程处于等待、阻塞状态,通过查看该线程运行的请求具体调用哪些类,去定位可能造成阻塞的问题类。,常见不健壮代码的特征和建议尽早释放无用对象的引用。好的办法就是在使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。程序中不可避免的大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域。尽量少用静态变量,因为静态变量是全局的,GC不会回收的。避免集中创建对象尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。,尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄露,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论