HIT 软件构造 动态性能分析

分析方法

代码插入

定义:在原始程序中加入某些语句来收集运行时数 据,这些语句不改变原程序的语义,但对原程序的性能有了轻微变化
实现:可以自己实现,也可以使用自动工具,从中间语言(比如汇编)添加,向二进制文件中添加,运行时注入(运行时跳转到help函数)
但是不管是哪种方式都会改变程序性能
优点:准
缺点:源代码被修改了

采样

定义:以特定的频率观察程序执行的特 定时刻所展现出的行为与状态
实现:定时记录代码快照
优点:不用改程序
缺点:需要在采样频率和准确率之间折中;会漏东西;难以监控内存使用情况

借助虚拟机获取程序性能数据

实现:利用虚拟机进行性能监控,所有JVM执 行的指令都被记录下来
优点:非常准确,可监控时空两方面的性能
缺点:相当于和VM绑定了,不同的虚拟机需要不同的测量工具

分析工具

profiler

在程序执行时收集信息的工具
输出:
所观察到的程序执行事件的统计结果
事件流 (trace)
实时或周期 性的获取/展示程序运行过程中的数据
类型:
Flat profiler (计算平均调用次数)
Call-graph profiler (计算函数的调用次数和频度)
Input-sensitive profiler (在Call-graph profiler的基础上加入了具体输入的影响)

命令行工具

jstat(-gcutil,-gc):

获取java虚拟机的堆使用和GC的新能统计数据

jmap( ,-dump,-heap,-histo,-clstats):

输出内存中的对象分布

jhat:

导出堆的转储文件,并且可以浏览查询其中的对象分布

jcmd(process id/main class>)
jstack:

获取java线程的stack trace
定位线程出现长时间停顿的原因,如多线程间死锁、死循环、请求外部资源 导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没 有响应的线程到底在后台做什么事情,或者等待什么资源。

JMC和JFR

收集低层和详细的运行时信息(只要知道这俩啥都能干就行了)
使用方法点这里

JConsole

一个具有图形用户界面的监视工具

VisualVM

功能:
展示局部和远程java进程
展示进程配置和环境
监视进程性能和存储
可视化处理线程
分析性能和内存使用
线程转储
堆转储
核心转储

virtual GC

VisualVM的一个插件

MAT(memory analyzer tool)

可以帮助发现内存泄漏和减少内存的消耗
可以独立运行,也可以作为eclipse的插件运行

总结生成堆转储文件的方法

jmap -dump
jcmd GC.heap_dump
-XX:+HeapDumpOnOutOfMemoryError (VM command)
hprof
jconsole HotSpotDiagnosticMXBean

名词解释

  1. 静态分析:进行抽象的代码分析
  2. 动态分析:要使用具体的输入值
  3. 80-20原则:80-20准则说的是大约20%的代码使用了80%的程序资源;大约20%的代码耗用了大约80%的运行时间;大约20%的代码使用了80%的内存;大约20%的代码执行80%的磁盘访问;80%的维护投入于大约20%的代码上(引用别人
  4. profiling(性能分析):针对时空复杂度
  5. Shallow heap:某个对象消耗 的实际内存
  6. Retained Heap:某对象被GC,所释放的内存
  7. Outgoing references:该对 象所引用的其他对象
  8. Incoming references:引用该对象的其他对象
  9. Dominator tree:支配树展示了内存导出文件中最大的对象(控制树是从reference来的,但是这个转化是不可逆的)
    在这里插入图片描述

内存泄漏分析

对问题发生时刻的系统内存状态获取一个整体印象。
找到最有可能导致内存泄露的元凶,通常是消耗内存最多的对象
进一步查看内存消耗最大的类/对象的具体情况,看是否有异常行为。

欢迎关注公众号BBIT
让我们共同学习共同进步!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值