Java应用性能分析

原创 2017年01月03日 14:28:51

性能分析

  • 概念:性能分析是一种从运行的应用程序中收集性能数据的活动,该活动可能会对应用程序的响应性吞吐量造成影响。其很少在生产环境中进行,通常在质量评估、测试或者开发环境中进行,作为监控活动发现性能问题时的后续活动。
  • 其包括方法分析内存分析

方法分析

  • 提供Java应用程序中方法执行时间的信息
  • 工具Oracle Solaris Studio Performance Analyzer,它能够对Java方法及本地方法进行分析。
  • 术语
    • 包含时间(Inclusive Time) 。方法自身及其子调用方法的执行时间总和。
    • 独占时间(Exclusive time)。执行某方法的时间,不含此方法调用其他方法的时间开销。
    • 归因时间(Attributed time)。被某方法调用所产生的时间开销。
    • 系统态CPU时间(System CPU)。方法运行在内核态时所占的时间或者时间比率。
    • 用户态CPU时间(User CPU)。方法运行在非内核态时所占的时间或者时间比率。
  • 指标:每个指标都细分为包含时间和独占时间
    1. 用户态CPU时间
    2. 系统态CPU时间
    3. 锁竞争时间 (用户态锁指标)
  • 性能分析步骤:
    1. 从Call Tree选项卡入手,从较高的层次快速了解应用程序在哪个用例上消耗了很多时间
    2. 从程序设计入手修改,

Call Tree

  1. 作为补充,使用Functions选项卡对样本数据进行分析,找出应用程序中执行最多的热点方法,改进某个方法实现

Functions选项卡

  1. 减少对系统态CPU的使用。系统调用所消耗的CPU时间可用于运行程序
  2. 尽量减少锁竞争(需要搞明白为什么锁竞争降低程序性能?)
  3. 方法分析中 <JVM-System>标识是个通用占位符,代表Java虚拟机内部进行垃圾收集、JIT编译、装载类及其他JVM内部管理活动所消耗的时间,按说方法分析的时候应该忽略。

内存分析

  • 同方法分析的着眼点不同,它提供Java应用程序内存的使用信息,包括内存中已分配对象的数目、大小以及活跃对象等信息,并附有对象分配时的栈追踪信息。
  • 工具:NetBeans Profiler
  • 术语

    • Allocated Objects(分配对象)。性能分析器跟踪的对象数
    • Live Objects(活动对象)。当前堆上分配的对象数目,这部分对象位于内存中。
    • Live Bytes(活动对象大小)。显示活动对象使用的堆内存大小。
    • Avg.Age(平均年龄)。活动对象的平均年龄,对象的年龄指该对象经历的垃圾收集次数。年龄总数除以活动对象数即为平均年龄
    • Generation(代)。根据活动对象进行统计。对象年龄是该对象经历垃圾收集次数。代的值是活动对象按年龄大小分成不同代之后的代的个数。按代排序常常可以帮助我们定位内存泄露的源头是哪一个类。这是因为代值的增加是内存泄露的一个典型特征。

    使用NetBeans Profiler 分析内存

  • 内存分析方法

    • 对结果进行快照,关注那些分配了大量内存并具有较短平均年龄的对象,这些是减少对象分配的良好着眼点。减少对象分配的方法和策略有:减少调整底层容器大小的次数池化对象(Netty中使用)。但是,通常情况下使用对象池不是一个好办法,除非分配回收这些对象的代价很大。缺点有:不易管理,提升编程难度,容易导致内存泄露,使用不当性能也是无法提高。或者说,这个和java编程思想是有违背的,应该作为最后的优化手段。
    • 定位内存泄露
    • 分析堆转储
版权声明:本文为博主原创文章,未经博主允许不得转载。

如何对 Android 应用进行性能分析

如何对 Android 应用进行性能分析
  • xiaopihair123
  • xiaopihair123
  • 2016年11月13日 14:47
  • 1481

Java性能优化指南系列(二):Java 性能分析工具

进行JAVA程序性能分析的时候,我们一般都会使用各种不同的工具。它们大部分都是可视化的,使得我们可以直观地看到应用程序的内部和运行环境到底执行了什么操作,所以性能分析(性能调优)是依赖于工具的。在第2...
  • qq_28674045
  • qq_28674045
  • 2016年07月04日 11:20
  • 7402

java应用性能分析

java应用性能分析 相关介绍 写这篇文章的起因 前一段时间我使用了OptimizedIt进行UniPortal系统的测试时,遇到过两次系统自动退出的问题,于是开始分析OptimizedIt及它实现时...
  • rtyou1234
  • rtyou1234
  • 2013年07月15日 17:04
  • 720

Linux 性能分析以及调优介绍

原文:http://blog.csdn.net/hn2002/article/details/7426907 Linux 性能分析以及调优介绍     写在前面:计算机要解决的基本问题之一...
  • luokehua789789
  • luokehua789789
  • 2016年11月02日 14:09
  • 552

javaweb项目,性能分析

我认为 javaweb 项目的性能由: 代码  + sql查询 + 服务器 构成 ; 大概 是一个 1:3:6的比例。          所以最重要的是服务器的管理:          服务器的解...
  • z654893465
  • z654893465
  • 2017年05月03日 22:07
  • 291

Java性能分析工具&&JProfiler

程序性能分析的起点其实与Java无关,它是一组操作系统自带的基本监控工具。 Unix系统中: vmstata、iostat、prstat、top等 Window系统中: typ...
  • sunquan291
  • sunquan291
  • 2017年07月01日 16:58
  • 135

排序算法的实现及性能分析

排序算法的实现及性能分析 ——(java版) 排序是对数据元素序列建立某种有序排列的过程。更确切的说,排序是把一个数据元素序列整理成按关键字递增(或递减)排列的过程。 不过首先,我们必须先解释一下关键...
  • xorxos
  • xorxos
  • 2015年04月02日 17:03
  • 854

Linux常用命令(6)-性能瓶颈分析(java)

top:top命令监控CPU利用率,进程状态和内存利用率并且可以详细列出每一个进程占用了多少CPU和多少内存。 [map@ctb-test sectionLocus]$ top top - 10:5...
  • cdl2008sky
  • cdl2008sky
  • 2014年11月26日 18:11
  • 6290

常用的java性能分析工具和命令

一 系统或jdk内置的分析命令和工具 1 top     top     top -H -p     top -H -b -n 1 -p 2 jstack     jstack     jsta...
  • yaowj2
  • yaowj2
  • 2013年12月11日 11:34
  • 1828

使用Oprofile分析性能瓶颈--简单例子

1. oprofile简介 oprofile 是 Linux 平台上的一个功能强大的性能分析工具, 支持两种采样(sampling)方式:基于事件的采样(event based)和基于时间的采样...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2012年11月29日 17:31
  • 1216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java应用性能分析
举报原因:
原因补充:

(最多只允许输入30个字)