zoukankan      html  css  js  c++  java
  • 高性能-性能评估及工具

    带着问题去思考!大家好

    性能问题是架构前想的还是之后想的?评估什么?

      在设计阶段时,你需要理解整体架构和约束条件,不然你就回遗漏一些关键点,这将严重制约程序的运行,设计阶段就把性能目标预先考虑进去。当然安全问题也是一样的。一旦项目进入测试,部署和维护阶段,就得把更多的经理投入到微观优化,具体代码方式的分析,减少内存占用等工作。

      我们评估什么呢?评估的东西太多,就拿内存来说,显然需要评估内存占用情况,以便减少内存小号,查看那些类内存呢?专用工作集内存,提交大小,页面缓存池,峰值工作机,.NET堆内存大小,还是大对象堆内存。

    平局值还是百分位值


    用什么统计值才合适》多数人会优先选用平均值,但是应该考虑一下百分位值。如果对程序的可用性有要求,肯定会用到百分比形式的性能指标。例如:数据库请求的平均延迟必须少于10ms。95%以上的数据库请求延迟必须少于100ms。

    (P/100)xN,P为百分位值,N为数据个数。

    假定测试由0代垃圾回收导致的暂停服务时间

    1,2,2,4,5,5,8,10,10,11,11,11,15,23,24,25,50,87;

    18个样本数据。平均值为17ms,95%百分位值远大于50ms。如果只看平均值,你也许不会发现垃圾回收引起的延时问题。你还会发现,中间值(50%百分位值)与平均值的差距相当大,那些占比高的数值,对平均值的影响往往比较大。这样不具备统计学意义,也许只是偶然,可以用一条经验法则来确认所需的样本数,0-99%需要100个,99.9%需要1000个,以此类推,可以从数学角度了解到底需要多少样本数才够用。

    评估工具

      “性能监视器”,所属Category和名称,Processor Time计数器属于Process类,它的多个实例分别对应了当前存在的各个处理器。有些性能计数器还带有“元实例”,

      我们先熟悉一下基本的操作系统术语

    •   物理内存---安装在计算机中的物理芯片内存,只有操作系统才能直接管理物理内存。
    •   虚拟内存---属于进程的逻辑内存块。虚拟内存可以大于物理内存。虚拟内存中连续的内存块,在物理内存中不一定是连续的,进程中的所有内存地址都是指虚拟内存。
    •   保留内存---在虚拟内存地址空间中为进程预留的地址段,且永远不会被分配。保留内存无法用于内存分配,因为它根本不存在。只是一段内存地址
    •   已提交内存---物理存在的一段内存,可能位于RAM中,也可能在磁盘上,
    •   内存页---内存单位,每页包含了多个已分配的内存块,单位通常KB
    •   页面交换----在多个虚拟内存区域之间交换内存页的过程,内存页即可能与其他进行交换(软交换),也可能与硬盘交换(硬交换)。软交换的速度可以非常快,只要把内存映射到当前进程的虚拟地址空间即可,硬交换则涉及到速度较慢的硬盘数据交换。你的程序尽量避免触发硬交换。
    •   调入内存页--把内存页从其他地方送入当前进程,
    •   调出内存页--把内存页从当前进程送出至其他地方。比如磁盘
    •   上下文切换---保存和恢复线程或进程状态的过程,因为线程数目通常总是多余可用处理器数,所以往往每秒会发生多次上下文交换
    •   内核模式--该模式下允许操作系统修改底层硬件参数,
    •   用户模式--用于执行普通指令的非特权模式,

    Process类计数器可以提供很多重要信息。大家不妨试一试;

    PerfView

    他是由微软的.NET性能架构师Vance Morrison编写的。

    当然还有很多工具,。CLR Profiler,Windbg.MeasureIt。这里不在赘述,大家可以通过其他途径获取了解。这些只不过是一些可视化程序。更重要的是评估,评估在评估

  • 相关阅读:
    VS中添加搜索路径和链接库的方法
    hive多分隔符支持
    shell 遍历目录下的所有文件
    使用ansible控制Hadoop服务的启动和停止【转】
    Shell中的括号有其特殊的用法
    shell中括号[]的特殊用法 linux if多条件判断
    Linux中rz和sz命令用法详解
    vim 去掉自动注释和自动回车
    ping判断局域网ip使用情况
    shell判断有效日期
  • 原文地址:https://www.cnblogs.com/ccaa/p/12548674.html
Copyright © 2011-2022 走看看