性能优化工程中(SPE)性能监控器的应用与最佳实践。

Last update 20190601

什么是SPE(SoftwarePerformanceEngineering)

SPE是指通过在软件开发阶段引入一整套流程使产品的响应速度与扩展性满足用户需求并且可量化与预测性能最佳与最差情况。

为什么需要它

在开发软件时有些组织是先把功能做完,即所谓的Make it run first。此时大部分组织的重点放在了功能开发上,对性能需求的考虑是放在第二,甚至第三阶段。 有时候甚至不考虑性能,只有当客户反馈了问题之后才会着手去优化代码。
这种方法有时候是可行,但并不能保证项目100%顺利发布并且得到用户满意。当运气好的时候通过后期优化瓶颈代码可以得到性能上的提升并有可能获得客户的信任。但如果遇到:

  • 当性能瓶颈是系统架构时通过优化瓶颈代码,参数调节是无法达到优化目标。
  • 当业务增长负载超出了当前系统承受范围时试图通过盲目的添加新硬件解决性能问题。这无论是对服务器或嵌入式设备,从利润角度来看是失败的。
  • 需要业务扩展的时候无法根据之前项目的经验准确的预估系统整体承受能力,这会使项目再次进入风险中。

时会导致项目delay,返工,甚至退货等损失。

如何避免陷入到风险中

系统化解决方案是在项目定义阶段将软件性能需求定义纳入到必考察项。根据性能需求开展后续的:

  1. 软件与硬件架构设计
  2. 定义软件与硬件以何种形式构建,关键部件性能指标(如运算量,吞吐量)。
  3. 用户场景关键路径性能建模。
  4. 如果是排队系统的话使用排队论对其建模。
  5. 性能需求测试用例开发。
  6. 系统与应用性能指标的监控与收集。
  7. 性能数据挖掘与预测。
  8. 容量规划。

这种系统化的解决方法就是本文讨论的SPE(Software Performance Engineering)。

适用于移动设备的优秀性能监控器应该怎么样?

实现优秀性能监控程序时需要满足:

  • 监控程序本身性能消耗比较低(如CPU,内存,IO使用量)。
  • 收集准确且完整的关键性能指标。

怎样完成上面的要求:

  1. 安插在系统各个关键地方的探针用于收集系统或应用程序在运行过程中的关键指标。探针代码通过使用C编写做到了低CPU使用及低内存占用有效地解决了监控程序本身性能消耗的问题。探针埋点由CavemanWork专家团队完成,此部分工作需要对系统的深刻理解。
  2. 传统的监控器一般是通过读取Proc,Sys等文件节点记录OS层的性能指标,这种方法会频繁触发大量的系统调用与内存拷贝。Insighter通过运行在内核上下文的模块使用内存共享方式将OS层数据传递给用户空间程序。它避免了反复的系统调用与内存拷贝,又减少了大量的字符串解析工作。这为数据的高频采集提供了可能性。
  3. 通过使用文件映射的方式存储数据,减少了多余的系统调用与内存拷贝使IO性能最佳化。

通过性能数据监控与分析可以实现系统性能瓶颈定位,指标间关联性计算,异常检测,容量规划,趋势可视化,老化预测等功能。