JProbe 8.0:Java代码、内存及覆盖率分析王者回归
来源:互联网 发布:mac充电器怎么用 编辑:程序博客网 时间:2024/06/05 08:41
2.复制client-support.jar文件放在D:\Program Files\JProbe 8.1\ lib目录下
3.运行jprobe ,添加jprobe-suite.license文件
Jprobe使用说明记录
一、总述
当多个用户使用java开发的应用程序时,应用程序的可靠性和伸缩性就可能会给可用性带来风险,出现性能瓶颈、内存泄漏、进程已经为测试代码等问题。只可以利用与java涉及的解析器。内容包括:性能分析、内存纠错、代码覆盖、线程分析。
功能:
1. 轻松发现和消除性能瓶颈;
2. 查找问题代码;
3. 节省后续硬件的开打投入;
4. 与开发过程集成,改善应用性能。
二、分析工具选择
它取决与你在你的应用中遇到问题的类型。
1. 如果你的应用比较猛烈的,你可以先用记忆分析器(Memory analysis);
2. 如果你的应用是需要挂起的,一个可以进行死锁分析的性能分析器(Performance)是一个比较好的开始。
3. 如果你的应用比较迟钝,我们将安逸利用一个记忆分析器跟随一个性能分析器。因为,一个内存泄漏最终会引起服务器运行猛烈。所以,你将首先提出这个问题。在你的代码在整个应用环境中运行工作后,性能分析器可以帮助你调整(测试)你的应用是如何走的。
4. 覆盖分析(corverage analysis)可以在任何时候起作用。
三、JProbe MemoryDebugger
记忆分析器是可以帮助开发人员快速查找java代码的内存泄漏和对象循环。内置的图形化实时内存使用和对象试图,有助于开打人员理解应用的内存使用,设法减少内存消耗以提高应用性能。
记忆分析工具可以帮助你在你的JAVA应用中去改善内存使用,减少不必要垃圾收集。当你运行的时候,你用运行时间摘要视图查看整体记忆方案的行为,找出导致内存泄漏或者内存溢出的类。之后你利用一个记忆快照捕获输入的数据,再用堆调查工具,从视图引用开始,分析鉴定泄漏例子,然后找到他们被分配的地方或者找到导致内存溢出的源对象。
3.1主要功能:
1. 识别内存泄漏:通过医用的两份分析,跟踪运行时的内存增长。Memory Instance Caculator(计算内存泄漏量)
2. 智能化内存分析:通过Leak Doctor发现可能的内存泄漏;
3. Aggregate Memory Footprint:理解对象创建的实际开销;
4. Reference Graph 和 Instance Detail:跟踪内存使用和对象引用;
5. 垃圾回收分析:检测过多的短期对象和垃圾及详情;
6. Snapshot比对:确定代码改变对内存使用的影响。
3.2使用步骤及说明:
1.创建记忆分析案例。
(1)进入JProbe Console。
(2)点击按钮。进入下图。
(3)选择下的。点击【add】按钮。
说明:本机测试环境使用的是tomcat 6.0。
(4)选择所选择tomcat路径,点击【next】按钮。
(5)选择Java jdk路径,点击【next】。
说明:测试自己所写java程序时使用。
(6)持续点击【next】按钮。
说明:在使用Memory分析器时,此处可以为空。如果filter下有所测试的文件包,那么在运行时,memory则会跳过记录该文件包下的代码。说明:此处可以选择分析器种类。我直接选择memory,点击【next】按钮。
说明:本图中,“JProbe Options”在大部分分析测试中可置空,但是他是有用的,你可以通过它来更改创建快照的目录。
(7)输入信息完成。
说明:此处可以查看所选择的限制信息。点击【save】按钮。
(8)保存项目信息jpl文件,路径可以指定。
(8)设置完成。选择“Integer”,点击【Finnish】按钮。
说明:Continue表示重新输入设置信息;Integer表示设置完成。
(9)创建JProbe 启动TOMCAT脚本路径。点击【save】按钮。
(10)开始运行。点击【close】按钮。Memory运行。
2.代码录制
(1) 在上一部分中的(10)进行完成后.点击下图中的.
(2)之后出现如下图.”Host Name/IP Address”输入所监控的tomcat的IP,本地直接用“localhost”。点击[确定]按钮。
(3)开始监控。
3.内存监控数据分析
内存分析工具主要有以下三个:MemoryPools Tab、GC Date Tab、Heap Date Tab。
(1) Memory Pools
MemoryPools展现的是内存的历史使用和内存池的共同可用内存,可用部分是内存池所有可用部分的总和.当你运行一个session时,概括图形表现的是堆内存默认的大小。
点击,可以配置堆池或者非堆池。堆池(heap pools)包括的是在java中通常就可以发现的事情,比如java对象。非堆池(Non-heap)通常包括的是JVM内部调用的东西,比如编译提示的方法代码或者类信息。
点击此处,可以切换图形统计时间。可以同步到GC tab。
Heap pools:
TenuredGen是一直存在的旧的存在;
EdenSpace 和 Survivor Space共同代表新的产生。Eden Space表示生成代码时调用的内存;SurvivorSpace表示还在使用得内存,存活的代码调用。
AvailableMemory用来表示,已经使用的和待使用的之间的差异。
Non-heap:
Codecache:还在缓冲储存区中的代码
Permgen:正在调用的代码。
(2) GC data
GCdata包括一个图形和一个表。图像表示的是当应用发生时,每种类型的垃圾回收。图形表示垃圾回收与程序运行时经过的时间百分比。如果百分比过大,您可能需要调整GC配置,或者减少对象循环。表提示的是每次垃圾回收故障之间的时间间隔等。
JProbe依赖于JRE,骨灰存在垃圾回收情形。GC采用copy内存,只会记录活动的项目内存,放在指定内存的位置。在程序运行后会产生一些活动的项目,也占有一定内存,这是GC会清理不活动项目,垃圾回收。
(3) Heap Data
调查表将选出调用占有率最高的五个类别。每个类别可以通过直接点击进入查看。
Heap Date包括以下一类型:
1. Recorded Count
2. Recorded Memory
3. Heap Count
4. Heap Memory
5. Dead COUNT
6. Dead Memory
Recorded count/ Recorded Memory :在随后的仕途中查看已记载过的数据;
Heap Count/Heap Memory:在随后的视图中查看输入的堆数据;
Dead Count/Dead Memory:在随后的视图中查看垃圾数据。之后点击颜色说明,可查看该垃圾数据的痕迹;
Record Count/Record Memory:查看其详情;
Heap Count/Heap Memory:考虑在堆中的所有例子,而不是仅仅看见的记录。
点击按钮,查看运行调用到的类。
Interacting with the MemoryRuntime Summary View
交互记忆运行时间摘要视图
(1) Display non-heap data:展示非堆数据,点击按钮,可以选择非堆选项。这项操作不是对所有JVMs有影响。
(2) 修改垃圾回收和内存池的时间间隔:点击
(3) 改变数据记录水平或加一个滤波器:点击,打开记录水平对话框,修改收集选择信息类型,或者申请滤波器来指定表中的范围
(4) 在堆页中显示运行时间的数据。点击;
(5) 申请一个堆的垃圾回收:点击,结果可以在GCTAB里面查看。
(6) 拍照:点击,等待左上角出现拍照记录,之后可以点击记录,查看拍照数据,进行分析。
(7) 查看执行日志:点击,查看运行记录日志数据。
(8) 创建报表:点击,可以导出运行数据报表。
(9) 将图表保存为PNG或者JPEG文件。将鼠标点击到需要保存图片的图表上,右键选择要保存的图片类型。以及保存的图片的位置。
(10) 导出数据到CVS格式:将鼠标点击到需要保存图片的图表上,右键选则exportto CVS,在导出对话空选择位置,名称等。导出后,可用excel查看数据。
拍照分析:
快照一般包括以下数据:JVM的堆(包括所用用例、他们的关系、以及他们关系的对象);特定用例的记录数据(当地时间、遗迹、被回收的用例)。这些信息取决于初始时对记录项的选择。
1. 点击,若其变为,则表示正在拍照中。
2. 拍照成功后,双击左上角的快照名称,等待生成快照数据。选择拍照的数据越少,速度也也快,也越容易分析。
3. 拍照成功后,得到以下图片
5. 选择需要查看的类,点击,得到该类详情,如下图。
6点击,查看关系图。
四、JProbePerformance
JProbe Performance主要用来查看内存使用情况和流线型垃圾回收。资深开发工程师一般在程序开发的最后阶段使用Performance,用来提高程序的效率。Performance在程序中最大的亮点就是帮助你确定程序的瓶颈,比如运算太慢或者过程太长导致的阻塞等。要分析方案运行结果,你必须是一个拥有深厚的构建知识,并且能够预见方案的行为的资深软件开发师。
This information displaysin several Performance views including the Call Graph, Method Detail, SnapshotDifference, and Performance Report.
在设置Performance时,前面的设置于Memory类似。但是下图中的数据必须全部填写。
1. general:分为两部分Timing和deadlockdetection,及基准时间与死锁发现。Timing时间基准可以选择elapsed(程序经过的时间)或者CPU;deadlockdetection可选择也可以不选择。
2. filters:选择监控的代码包或者方法等;此部分的代码需要在前面设置;
3. automation:选择关联到的方法。
代码录制级别:
Data recording off:在开始调查程序的时候,你是不知道程序的性能瓶颈的,但是这个程度就已经够找到性能瓶颈了;
No Encapsulation:只能够收集到filters里面的方法代码;
Grouped Encapsulation:可以收集到你的方法数据以及方法调用到的编译数据;
Full Encapsulation:收集到所有方法,以及方法所调用到的方法。
除非你选择“data recording is off”,否则一旦你点下OK,那么数据就开始记录。
设置好,运行后,进入performance运行窗口。
Performance页只包括Memory pools 和GC data 两部分。
利用performance的第一步是保存基准照片(数据)即Saving Baseline Snapshots。在做压力测试时,最重要的就是发现程序瓶颈。此问题可以在这里得到实现。
首先,建立一个基准数据(照片)。运行一个正常的步骤,一个用户就可以了。然后拍照,作为基准数据;(你可以多运行几次,用一个差不多稳定的作为基准)
然后,捕捉压力性能测试时的数据(照片)。在程序运行压力测试时,拍照。
最后,对比基准数据与性能测试时的数据,以此来找到程序的性能瓶颈。
具体操作为,右键需要对比的照片,点击其“snapshot Differencing…”,然后会出现对话框:选择基准数据与对比数据。
选择完成之后,点击【ok】按钮。出现对比类的对比数据列表。
基准计较类型:
1. number of calls:方法被调用的次数;
2. method time:方法持续花费的时间,不包括调用的其他方法花费的时间;
3. number of catches:达到例外的方法次数;
4. Number of Exception Exits:排除特例的方法次数。
三准途径签定潜在瓶颈:
一、寻找麻烦关键点;点击照片右键选择“open call graph view”,根据自己的经验判断哪些数据有可能有问题。
二、寻找麻烦关键点的关键路径;
三、利用导航图(Navigating the Call Graph)寻找麻烦关键点。
五、JProbe Coverage
覆盖分析器可以帮助开发人员查找为执行代码,精确计算一致性代码,简化对测试工作可靠性和精确度的评估。但是,他不可以分析代码循环。
5.1主要功能:
1. Coverage Browser和Source Views:迅速确定为测试代码和死代码;
2. Conditional Coverage Analysis:分析特定条件所覆盖的代码范围,包括含有多个条件语句的代码行;
3. Filter Catch Blocks:更精确的覆盖范围报告;
4. 批发处理模式:可通过批处理方式运行,简化夜间编译/测试系统的整合;
5. 报表功能:以XML、纯文本、CSV或者HTML格式输出覆盖范围报告,以实现个性化的分析;
6. Snapshot合并:对多次运行中的覆盖范围数据进行合并。
5.2使用步骤及说明:
Coverage 配置方式与Performance类似。
代码覆盖测试一般以以下为默认设置。
• General > Line:JProbe tracks which lines of code in your application are called
during your test case.Conditions are not tracked.按行追踪应运,但是条件不追踪。
• Filters: JProbe usesyour application filters as the default data collection filters.以配置的我的代码文件夹部分作为漏斗。
• Automation >Initial Recording at JVM Start: Data Recording On.
(1)配置完成后,直接点击开始运行。进入以下窗口
(2)拍照或者,停止运行后系统自动拍照。双击所拍的照片。
- JProbe 8.0:Java代码、内存及覆盖率分析王者回归
- gcov测试代码覆盖率及分析代码性能
- PHP 代码覆盖率分析
- 代码覆盖率分析
- 代码覆盖率分析
- 代码覆盖率分析
- android java代码覆盖率
- java 代码覆盖率
- JAVA代码覆盖率工具JaCoCo-原理简单分析
- 代码覆盖率分析(gcov)
- 单元测试--Robolectric及代码覆盖率
- iOS-单元测试及代码覆盖率
- 一元线性回归分析及java实现
- 一元线性回归分析及java实现
- JAVA代码覆盖率检测工具-EMMA
- Emma:Java代码覆盖率工具
- Java 代码覆盖率注入方式
- 《王者荣耀》体验报告及分析报
- tcp http 区别
- MATLAB与图像处理(三):图像分成块
- java String 之参数传递
- 数据清洗与收集week1
- Android语音识别SDK语义理解与解析方法
- JProbe 8.0:Java代码、内存及覆盖率分析王者回归
- c++显示类型转换
- 终于能用Windows Live Writer写CSDN博客啦
- mysql约束总结
- MATLAB基本操作(三):数据类型
- centos6 bind9 反向解析设置
- asp.net之验证图片
- Oracle TNSListener服务启动后自动停止问题
- MFC修改外观