• 关于性能调优


    概述

    =========

    性能是指程序的处理效率无法达到预期值.

     

    导致性能问题的原因总的分为两种, 外部原因和内部原因. 内部原因是指程序代码本身有问题, 无法高效地利用资源来完成计算. 外部原因是指程序代码以外的因素, 比如硬件配置和程序的负载.

     

    解决性能问题的关键在于把瓶颈找出来, 然后消灭瓶颈.

     

    预备

    ==========

    为了防止进入永无止境的性能优化圈(客户提出瓶颈, 你分析瓶颈, 解决瓶颈, 客户再次提出瓶颈, 你再次进行调优, 如此反复)之中, 可以询问客户下面的问题:

    1. 为什么接近某个时间(比如说1分钟)才能打开就是不正常的? 根据你的设计, 所有请求应该在多少时间内返回才算合理? 平均返回时间是多少才合理?
    2. 没有文献说明所有情况下, 某事件(比如说Request_Begin)与某事件(比如说Page_Load)之间应该在某时间限制(比如说20秒)内完成. 例如, 在GC发生的时候所有执行都会被挂起, 所以某些函数之间停滞20秒是完全正常的事情, 我并不认为这个问题跟接近1分钟才能打开页面有直接联系. 如果怀疑是整体的性能问题, 我建议先不考虑Request_Begin和Page_Load之间的细节.
    3. 问题发生时候的外部环境是什么? 程序的负载是不是在理想的范围内? 有没有第三方的程序干扰?
    4. 有没有具体数据来说明到底有多少请求超过了1分钟? 这些请求具体的返回时间是多少?
    5. 你的期望值是多少? 这个期望值是如何计算出来的?
    6. 你设计的是一个实时系统么? 如果是, 可能Windows和ASP.NET并不是一个好的平台. 如果不是, 某些个别请求无法再期望时间内返回是无法避免的. 你能接受这样的事实么?

    行动

    =========

    总的来说, 性能调优的步骤是:

    1. 获取当前的性能指标, 比如平均反应时间.
    2. 获取测试时外部因素的量化资料, 比如每秒钟请求数.
    3. 根据程序的设计, 判断上面的外部环境是否符合预期. 如果不符合预期, 那么在改善外部环境后重新测试.
    4. 如果外部环境符合预期, 理想的性能指标是多少? 结果是否在理想范围之内?
    5. 如果不在理想范围之内, 那么问题是由于内部因素导致的. 接下来应该努力找到瓶颈来解决问题.
    6. 观察性能相关的指标是否满足预期值, 比如CPU利用率和程序响应时间.
    7. 分析性能日志以获得宏观认识.
    8. 制定步骤, 在问题发生的关键点抓取dump文件. 比如当CPU利用率达到100%的时候, 或者系统没有响应的时候.
    9. 分析dump来获取问题的线索.
    10. 有条件的时候, 可以结合profiler工具完成细节统计和比较, 简化分析过程.

    摘自<Windows用户态程序高效排错>

  • 相关阅读:
    Swagger接入
    Elasticsearch5.0.1索引压测结果
    Elasticsearch5.0 BreakChange摘要
    Elasticsearch1.7到2.3升级实践总结
    Java动态代理全面分析
    Spring之AntPathMatcher
    Lock的实现之ReentrantLock详解
    Elasticsearch之client源码简要分析
    elasticserach 索引删除 源码分析
    httpClient4.5.2工具类总结
  • 原文地址:https://www.cnblogs.com/heavyhe/p/4547198.html
Copyright © 2020-2023  润新知