开发自动化系列-工具集(二)系统性能监控工具

摘    要 html

孔子云:工欲善其事,必先利其器。做为开发人员,咱们致力于为最终用户实现工做流程自动化;然而,许多开发人员却疏忽了将本身的开发流程自动化。企业级应用系统涉及到开发、测试、部署、实施等一系列开发流程,在整个软件开发过程当中咱们如何借助工具、方法和模式使过程简单自动化,减小一些低效繁琐的开发工做量。 数据库

本系列试图使用一系列的工具介绍帮助你们在平常工做中减轻繁杂低效的开发工做,借助于现有的一系列工具提高你们的开发效率,使你们平常工做作到事半功倍。 windows

在 Java 程序的开发过程当中,不可避免地会遇到内存使用、性能瓶颈等问题。Java Profiler 工具能帮助开发人员快速、有效地定位这些问题,所以成为了 Java 开发过程当中的一个重要工具数组

本文做为该系列的第二章,介绍Java EE应用的系统性能监控工具JProfiler,JProfiler能够经过时时的监控系统的内存使用状况,随时监视垃圾回收,线程运行情况等手段,从而很好的监视JVM运行状况及其性能。经过介绍这个工具的使用,帮助开发人员发现系统应用的性能瓶颈,提高系统运行性能。 浏览器

1、 JProfiler是什么? 缓存

JProfiler是一个全功能的 Java 剖析工具( profiler ),专用于分析 J2SE 和 J2EE 应用程序。它把 CPU 、执行绪和内存的剖析组合在一个强大的应用中。 JProfiler 可提供许多 IDE 整合和应用服务器整合用途。 JProfiler 直觉式的 GUI 让你能够找到效能瓶颈、抓出内存漏失 (memory leaks) 、并解决执行绪的问题。它让你得以对 heap walker 做资源回收器的 root analysis ,能够轻易找出内存溢出; heap 快照( snapshot )模式让未被参照( reference )的对象、稍微被参照的对象、或在终结( finalization )队列的对象 都会被移除;整合精灵以便剖析浏览器的 Java 外挂功能。 性能优化

JProfiler的原理首先在于JProfiler使用JVM提供的JVMPI虚拟机监视接口,它是一个用于JVM与监控程序之间双向调用的接口,双向是指JVMPI一方面提供事件的方式通知监控程序JVM的信息(如堆分配、线程启动等),另外一方面也提供方法让监控程序主动请求得到JVM更多的信息。其次,JProfiler还提供探查代理,从传输协议中获取各类监控信息。 服务器

2、 JProfiler能作些什么? 多线程

从功能上而言,JProfiler提供了如下功能: 工具

l 内存消耗的测量

l 内存堆栈跟踪

l CPU负载分析

l 瞬时堆分配信息

l 线程分析

l 虚拟机负载可视化监控

l GC分析

l 经过远程进行分析

JProfilerJVM收集到的信息经过GUI可让用户经过观察获取当前应用的JVM各类状况,从而进行性能调优,好比找到哪一个对象占用的内存比较多;哪一个方法占用CPU资源比较多,服务器线程状态、是否存在阻塞问题,服务器是否存在内存泄漏等问题。

3、 JProfiler怎么用?

JProfiler能够对Java应用、服务器应用进行分析,并且也支持对服务器进行远程的监控,综合公司状况,现主要介绍监听本地Weblogic服务器。

JProfiler 7.1.2  安装后输入注册码(这里使用的是破解版)

1. 监听本地Weblogic服务



新建配置


选择Weblogic





选择On this computer


选择JVM,模式使用hotspot


三种模式,第一种是手动链接,手动启动Weblogic服务器后再使用JProfiler链接,第二种是捆绑Weblogic启动文件,JProfiler同时启动服务和监听,第三种是经过快照实现离线监听,配置好触发器记录监控数据后经过离线月度监控报告,这里采用第一种。

选择Weblogic启动文件。

接下来继续点下一步知道完成便可,完成后在服务器域下会生成一个针对JProfiler的执行文件startWebLogic_jprofiler.cmd,而实际上这里只是把这个执行文件加入如下配置。


set JPROFILER_OPTIONS=-agentpath:C:\PROGRA~1\JPROFI~1\bin\windows\jprofilerti.dll=port=8849 %JPROFILER_OPTIONS%

点击这个startWebLogic_jprofiler.cmd启动服务,在JProfiler进入StartCenter


启动配置好的会话


显示这个页面表示链接成功


4、 JProfiler怎么去分析

1 内存视图

JProfiler 的内存视图部分能够提供动态的内存使用情况更新视图和显示关于内存分配情况信息的视图。全部的视图都有几个汇集层而且可以显示现有存在的对象和做为垃圾回收的对象。

图中是JProfiler的内存视图,经过过滤器设置过滤报名com.comtop能够得到系统代码在服务器中的内存占用状况,这里能够看到CIMObjectIdMap在内存中有着海量的实体,也占用了11M内存,经分析能够推测CIMObjectIdMap这个台账Id映射对象是把数据库的内容缓存到内存中供台账模块的快速调用。


根据内存视图能够看到服务器的内存主要被那些对象占用,能够找出一些内存开销特别大的类、以及分析形成内存泄漏的问题。


内存视图下的功能模块

ü 全部对象(All Objects) :显示类或在情况统计和尺码信息堆上全部对象的包。你能够标记当前值并显示差别值。 

ü 记录对象(Record objects) :显示类或全部已记录对象的包。你能够标记出当前值而且显示差别值。 

ü 分配访问树(Allocation call tree):显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。 

ü 分配热点(Allocation hot spots) :显示一个列表,包括方法、类、包或分配已选类的J2EE组件。你能够标注当前值而且显示差别值。对于每一个热点均可以显示它的跟踪记录树。


2 堆遍历(Heap walker 

JProfiler的堆遍历器(Heap walker),你能够对堆的情况进行快照而且能够经过选择步骤下寻找感兴趣的对象。堆遍历器包括五个视图,以下: 

ü 类Classes:显示全部类和它们的实例。 

ü 分配Allocations:为全部记录对象显示分配树和分配热点。 

ü 索引References:为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。 

ü 数据Data:为单个对象显示实例和类数据。 

ü 时间Time:显示一个对已记录对象的解决时间的柱状图。


3 CPU视图(CPU Views 

   JProfiler 提供不一样的方法来记录访问树以优化性能和细节。线程或者线程组以及线程情况能够被全部的视图选择。全部的视图均可以汇集到方法、类、包或J2EE组件等不一样层上。CPU视图部分包括: 

ü 访问树Call tree:显示一个积累的自顶向下的树,树中包含全部在JVM中已记录的访问队列。JDBC,JMSJNDI服务请求都被注释在请求树中。请求树能够根据ServletJSPURL的不一样须要进行拆分。 

ü 热点Hot spots:显示消耗时间最多的方法的列表。对每一个热点都可以显示回溯树。该热点能够按照方法请求,JDBCJMSJNDI服务请求以及按照URL请求来进行计算。 

ü 访问图Call graph :显示一个从已选方法、类、包或J2EE组件开始的访问队列的图。

好比下图,服务器启动时的CIMSchemaLoadServlet,能够查看到这个方法一直占用CPU资源,这个台账的cim模型相关的方法,能够跟踪到具体执行开销到那个方法上,从而进行性能优化。

经过hot spots视图 能够发现当前消耗时间最多的方法列表,从而找到性能改进突破点,以下面的getAttributeValueType方法是目前最耗性能的方法。

再查看Call Graph视图,能够分析某个方法的性能开销细节。

4 线程视图(Thread Views

线程视图能够查看服务的线程运行状况,能够对服务器的状况进行分析,也能够对线程形成的服务器问题进行分析。

线程历史(Thread History显示一个与线程活动和线程状态在一块儿的活动时间表。查看线程在服务器的运行状况、线程的运行历史,能够在时间轴上查看线程等待、阻塞等等的状况。

线程监控(Thread Monitor显示一个列表,包括全部的活动线程以及它们目前的活动情况.查看线程的整体状况,包括线程建立的调用栈。

线程转存(Thread DumpsDump出某个时刻的全部线程,把当前线程模型记录一个快照。

服务器线程的运行状况(橙色是等待状态,青色是Net I/O线程)。


5 监视器视图(Monitor Views

暂未发现该视图的具体可用场景。


6 VM遥感勘测视图(VM Telemetry Views)

这个主要是针对虚拟机的各类纬度监测视图。这里只能对机器进行一个总体状况的观察,并无更细的问题跟踪功能。

ü 内存 Memory:显示服务器的内存状况的时间表,这里主要针对的是JVM的各内存分区的可用、已用内存大小。可选堆内存(Heap包括 PS Eden Space年轻代,PS OLD Gen年老代,PS Survivor交换区)的内存使用和回收状况。 或非堆内存(Non-Heap 包括Code CachePS Perm Gen

ü 记录的对象 Recorded objects:显示一张关于活动对象与数组的图表的活动时间表。 

ü 对象吞吐量 Recorded Throughput:显示一张记录每秒建立对象和销毁对象的速度的活动时间表。 

ü 垃圾回收 GC Activity:GC所占cpu状况

ü 类 Classes:显示一个与已装载类的图表的活动时间表。 

ü 线程 Threads:显示一个与动态线程图表的活动时间表。 

ü CPU Load:目前工程占用系统cpu状态。


7 系统探侦 JEE & Probes

这是JProfile 7 的新特性,专门针对JavaWeb应用而设,能够针对JDBCJNDIJMSServletSocketsProcessess的状况进行分析。展现的视图有时间线、概览、热点监测(针对耗时和发生次数)、勘测(吞吐量、建立数等等内容的监测)。

监测JDBC

能够查看Time Line 查看服务器对数据库的链接状况,能够分析服务器是否有链接数量是否正常、是否存在未关闭的链接等等。

经过热点(Hot Spots)能够监测某段SQL语句的执行耗时


l JNDI 

能够监测JNDI能够监测某项资源的请求调用状况。

这里能够看到从某个JSP的请求,能够看到每一个JSP都被两个过滤器处理。


l JMS

这里能够监控服务器的消息服务状况。


l Servlets 

这里能够监测服务器Servlet或者JSP请求状况,能够统计系统页面的访问时间以及访问次数,能够找到服务器耗时最大的页面。


l Sockets 

查看服务器的SocketIO操做状况,能够监测、分析链接服务器的客户端状况。

以下图,在Socket监测下,能够获得服务器的数据库链接信息、客户端链接、客户端请求内容等等。




5、 JProfiler的离线记录功能

因为现场环境和测试经过长期监测的方式去分析问题有必定的限制,由于不可能长时间守候监视程序,所以这里介绍一个JProfiler提供的离线监测功能。经过配置不一样的触发器,在不一样条件下触发数据记录(如服务器启动时开始记录、服务器关闭时中止记录并保存)。数据经过快照文件的方式存放,经过分析快照文件便可对服务器的运行状况进行研究。

具体配置方式以下:


一样按照上述的方式新建一个新的配置,在这一页配置项选择第三项(注意,采用离线监测的方式时,将不可以实时链接服务器进行监控)。









打开StartCenter ,选中刚刚新建的Session,点击编辑按钮进入编辑页面。

选择Triggers Settings ,点击新建按钮新建触发器,根据须要创建触发器。



这里就定义了两个触发器:服务器启动时触发开始记录数据,服务关闭时结束数据记录并保存。

定义完成后,打开startWebLogic_jprofiler.cmd即按照配置进行数据记录。


以保存的快照文件,经过Session->Open Snapshot打开快照便可打开记录的快照数据。


触发器可以根据如下条件触发:

ü 监听某个类的某个方法,当这个方法被调用时触发。

ü 虚拟机内存达到必定值时触发(如当应用的内存值达到一个异常值时)。

ü CPU负荷达到必定值时触发。

ü 应用发生Out of memory exception时触发。

ü 定时触发,每隔一段时间触发。


所以,根据以上触发器,能够构建如下典型的用法:

ü 当服务器内存占用或者CPU负荷达到必定异常值时,记录当前的系统各项指标的快照,找到致使问题的缘由。

ü 实现由人手触发生成的系统当前指标报告。

ü 定时收集服务器运行状况数据。

ü 当出现问题时记录问题的现场状况。



6、 总结

综合对JProfiler的多方面研究,得出如下结论,

1. JProfiler的功能能够完成如下典型的性能调优工做:系统的SQL性能调优、代码内存占用调优、代码性能调优、多线程调试、Web服务的优化及分析等等,按照快照方式也能够实现服务器异常(CPU占用异常、内存占用异常甚至宕机)时现场状况采集。

2. JProfiler适用性十分广,既能够用于开发组的代码级别的性能调优和代码分析,也能够用于产品级的服务器监控、问题预防,建议开发组、配置管理组尝试投入使用,也能够做为技术管理组对代码性能调优的重要数据来源。

3. JProfiler的使用不算困难,开发组具有能力发布并对本身本地的系统进行分析和性能调优,而配置管理组也能够在测试环境中配置JProfiler,按期输出运行报告做为性能分析和性能调优。

7、 参考资料

1.JProfiler  http://www.ej-technologies.com/products/jprofiler/overview.html

相关文章
相关标签/搜索