前言

简单写一下性能的简介。

正文

什么是性能,很多时候有一个问题,那就很多人喜欢说。这个服务有很多访问,我们需要这样设计。

这是一个无法验证的指标,访问次数是多少? 响应时间是多少。

我把这归纳为自我臆想。

那么这个时候就有一些指标。

比如说这个接口,大概有500并发,响应时间需要在300ms内。

这是一些指标。因为这个时候已经大体知道了,并发量。

那么如果不知道的情况下呢,是不是也有一些指标呢?

是的,也有一些典型应用程序的性能目标示例:

系统类型 性能目标 环境约束
外部服务器 从请求到回复生成完毕不得超过300ms 不超过300个并发活跃请求
外部web服务器 虚拟内存占用不得超过1.3GB 不超过300个并发活跃请求且不超过500个在线会话
应用服务器 cpu 使用率不得超过75% 不超过1000个并发活跃api请求
应用服务器 硬页面失效不能超过每秒2次 不超过1000个并发获取请求api
监控服务 从失败事件开始,到报警生成并发送出去,之间不得超过25ms -
监控服务 当没有报警生成的时候,磁盘io操作率应该是0 -

上面这些是一些经典的目标,但是不能忽视一点,那就是硬件环境。在什么样的硬件环境中测试上面标准才是有效的呢?

有了性能目标其实还有一个性能指标的东西,什么是性能指标呢?

性能指标不同于性能目标,它与具体场景和环境并不相关。

一项性能指标是一个用于体现应用程序行为的可测量的量化数值。

你可以在任意硬件及环境下测量一项性能指标,而不必关心此时有多少活跃用户、请求或会话。

在开发周期中,你可以以具体的性能目标总结出各项指标,并选择性的进行测量。

一般来说,客户端关注的是:启动时间、内存占用及cpu占用率。

对承担系统算法的服务器端应用程序来说,一般是cpu占用率、缓存实现、竞争内存分配和垃圾回收。

对web应用程序来说,一般会测量其内存使用量、数据库访问、网络,磁盘操作和响应时间。

  1. 在需求收集阶段,开始思考该设置怎样的性能目标
  2. 在架构设计开发阶段,提炼出各项重要的性能指标,并定义具体的性能目标。
  3. 在软件开发阶段,对原型代码或局部实现的功能进行比较繁琐的探索式性能测试,确保满足系统的性能目标。
  4. 在产品测试阶段,进行大量的负载均衡测试和性能测试,用于检测是否完全满足系统的性能目标。

开发维护阶段,按照所需,进行调整优化。

性能指标 测量单位
CPU使用率 百分比
物理/虚拟内存占用 字节(B/KB/MB/GB)
缓存失效 次,次/秒
页面失效 次,次/秒
数据库访问次数及耗时 次,次/秒,毫秒(ms)
执行事件 毫秒(ms)
网络操作 次,次/秒
磁盘操作 次,次/秒
响应时间 毫秒(ms)
垃圾回收 次,次/秒,耗时(毫秒),占总时间百分比
抛出异常 次,次/秒
启动时间 毫秒(ms)
竞争 次,次/秒

下一节cpu和内存的分析方法,和具体的工具。