重学c#系列——什么是性能[外篇性能篇一]
前言
简单写一下性能的简介。
正文
什么是性能,很多时候有一个问题,那就很多人喜欢说。这个服务有很多访问,我们需要这样设计。
这是一个无法验证的指标,访问次数是多少? 响应时间是多少。
我把这归纳为自我臆想。
那么这个时候就有一些指标。
比如说这个接口,大概有500并发,响应时间需要在300ms内。
这是一些指标。因为这个时候已经大体知道了,并发量。
那么如果不知道的情况下呢,是不是也有一些指标呢?
是的,也有一些典型应用程序的性能目标示例:
系统类型 | 性能目标 | 环境约束 |
---|---|---|
外部服务器 | 从请求到回复生成完毕不得超过300ms | 不超过300个并发活跃请求 |
外部web服务器 | 虚拟内存占用不得超过1.3GB | 不超过300个并发活跃请求且不超过500个在线会话 |
应用服务器 | cpu 使用率不得超过75% | 不超过1000个并发活跃api请求 |
应用服务器 | 硬页面失效不能超过每秒2次 | 不超过1000个并发获取请求api |
监控服务 | 从失败事件开始,到报警生成并发送出去,之间不得超过25ms | - |
监控服务 | 当没有报警生成的时候,磁盘io操作率应该是0 | - |
上面这些是一些经典的目标,但是不能忽视一点,那就是硬件环境。在什么样的硬件环境中测试上面标准才是有效的呢?
有了性能目标其实还有一个性能指标的东西,什么是性能指标呢?
性能指标不同于性能目标,它与具体场景和环境并不相关。
一项性能指标是一个用于体现应用程序行为的可测量的量化数值。
你可以在任意硬件及环境下测量一项性能指标,而不必关心此时有多少活跃用户、请求或会话。
在开发周期中,你可以以具体的性能目标总结出各项指标,并选择性的进行测量。
一般来说,客户端关注的是:启动时间、内存占用及cpu占用率。
对承担系统算法的服务器端应用程序来说,一般是cpu占用率、缓存实现、竞争内存分配和垃圾回收。
对web应用程序来说,一般会测量其内存使用量、数据库访问、网络,磁盘操作和响应时间。
- 在需求收集阶段,开始思考该设置怎样的性能目标
- 在架构设计开发阶段,提炼出各项重要的性能指标,并定义具体的性能目标。
- 在软件开发阶段,对原型代码或局部实现的功能进行比较繁琐的探索式性能测试,确保满足系统的性能目标。
- 在产品测试阶段,进行大量的负载均衡测试和性能测试,用于检测是否完全满足系统的性能目标。
开发维护阶段,按照所需,进行调整优化。
性能指标 | 测量单位 |
---|---|
CPU使用率 | 百分比 |
物理/虚拟内存占用 | 字节(B/KB/MB/GB) |
缓存失效 | 次,次/秒 |
页面失效 | 次,次/秒 |
数据库访问次数及耗时 | 次,次/秒,毫秒(ms) |
执行事件 | 毫秒(ms) |
网络操作 | 次,次/秒 |
磁盘操作 | 次,次/秒 |
响应时间 | 毫秒(ms) |
垃圾回收 | 次,次/秒,耗时(毫秒),占总时间百分比 |
抛出异常 | 次,次/秒 |
启动时间 | 毫秒(ms) |
竞争 | 次,次/秒 |
结
下一节cpu和内存的分析方法,和具体的工具。