• 性能分析十八招,你用哪一招?


    对系统或程序进行相关性能分析,有助于分析研究运行时出现的问题或查找出问题根源。而没有方法论指导的分析,如盲头苍蝇,费时费力。本文将阐述进行性能分析采用的十八个方法论。

    对系统或程序进行相关性能分析,有助于分析研究运行时出现的问题或查找出问题根源。而没有方法论指导的分析,如盲头苍蝇,费时费力。为确保软件满足或超过设计的期望值,有必要分析应用程序的性能以发现潜在的问题。性能分析一个必不可少的环节是使应用程序的组件可见。当能够了解组件是如何交互时,就可以诊断潜在的性能问题。

    主要采用的方法论,包括:USE 方法:找出资源瓶颈;TSA 方法:分析程序用时;Off-CPU分析:分析任何类型的线程延时;http://www.brendangregg.com/activebenchmarking.htmlActive Benchmarking(动态基准)分析,进行精确有效的基准分析。

    以下将列举出一个综览清单,开始部分包含一些个人不建议的反对的做法,不妨作为一个反面教材来参考。

    1. 推诿他人(反对的)

    • 尝试找出一个系统或环境的组件,但是该组件与你无关。
    • 假设问题出在该组件上。
    • 把问题推至与该组件真正相关的团队。
    • 当发现其实也与该团队无关时,重做第一步,继续找别人的茬。
    2.  指路明灯(反对的)
    • 采用以下任一方法来选择简便工具:自己熟悉的;在Internet找来的;随机找来的。
    • 运行工具。
    • 找出显眼的问题。

    3.  酒徒做法(错误做法)

    随机变更事物直到问题离去。

    4.  随机变更(错误做法)

    1. 测量一个性能基线。
    2. 随机找出并变更一个属性。
    3. 沿着某一个方向进行变更操作。
    4. 测量系统性能。
    5. 换个方向继续执行变更。
    6. 测量系统性能。
    7. 步骤4或6的结果好于基线吗?如果是,继续执行;否则,执行回退。
    8. 回到步骤1。

    5.  被动的基准(错误做法)

    • 选择一个基准工具。
    • 采用不同的选项组合运行工具。
    • 根据结果做一个幻灯片。
    • 按着幻灯片来进行管理。

    6.  临时的检查清单法

    运行 A,如果出现 B,执行 C。

    7.  问题陈述法

    • 什么让你觉得出现了性能问题?
    • 系统之前运作良好吗?
    • 最近执行了什么变更(例如:软件,硬件,负载)?
    • 是潜伏期或运行时间方面的性能减退问题吗?
    • 该问题会影响其他人或程序吗(还是仅仅是自己)?
    • 运行环境是怎么样的?用了什么软件或硬件?版本?配置?
    8.  系统法
    • 问题
    • 假设
    • 预测
    • 测试
    • 分析

    9.  工作负荷特征描述法

    • 谁正在引起工作负荷?PID,UID,IP地址等。
    • 为什么会产生工作负荷?代码路径
    • 工作负荷是什么?IOPS,tput命令,类型
    • 这些负荷随着时间是怎样变化的?

    10.自上而下分析法

    • 从最高级开始
    • 检查下一级别的细节
    • 找出最关注部分进行分解
    • 如果问题得不到解决,重做第2步

    11.逐层分析法

    从以下方面进行造成延迟的测量:

    • 多语言
    • 执行文件
    •  运行库
    • 系统调用
    • 核心:文件系统,网络
    • 设备驱动

    12.延迟分析法

    • 测量运行时间(延迟)
    • 划分成同步的逻辑部件
    • 继续进行划分直到找出延迟的根源
    • 量化:估算系统恢复后带来的速度提升

    13.工具法

    • 列出可用的性能分析工具
    • 针对每个工具各自特点列出有用的指标
    • 针对每项指标,作出相关解释
    • 运行挑选后的工具,针对选出的指标进行分析

    14.USE方法

    对于每项资源,作出如下检查:

    • 利用率(Utilization)
    • 饱和度(Saturation)
    • 错误(Errors)

    15. 栈配置法

    • 跟踪线程堆栈信息,针对on-CPU和off-CPU进行分析
    • 联合分析
    • 把堆栈倒置进行分析

    16.off-CPU分析法

    • 针对堆栈中每一计划调度线程进行off-CPU时间分析
    • 对类同的堆栈进行联合分析
    • 对于最长和最短用时进行分析

    17.TSA方法

    1.  针对每一引起重视的线程,测量操作系统线程状态的时间。例如:

    • 执行用时
    • 运行用时
    • 交换用时
    • 睡眠用时
    • 锁用时
    • 闲时时间

    2.  使用合适的工具对最高和最低发生频率事件进行分析。

    18.动态基准法

    • 以一个足够长的周期来运行测量基准。
    • 运行的时候,使用其他工具进行性能分析,查找出限制因素。
  • 相关阅读:
    改动ScrollView的滑动速度和解决ScrollView与ViewPager的冲突
    SpringMVC 学习笔记(五) 基于RESTful的CRUD
    86/88汇编代码的执行调试
    HTML5+CSS3设计界面
    导入gradle项目
    Gradle安装 Gradle效率提升 eclipse安装gradle插件 【我】
    Eclipse集成Gradle 【Eclipse在线安装Gradle插件方法】
    gradle下载的依赖包位置 及 修改
    idea 普通 web项目配置启动【我】
    理解 IntelliJ IDEA 的项目配置和Web部署
  • 原文地址:https://www.cnblogs.com/shengs/p/3971305.html
Copyright © 2020-2023  润新知