在运维各类系统、服务过程中,性能问题一直是运维工作中一个很大的挑战,最近发现了一本好书,是一位性能专家Brendan Gregg编写的《Systems Performance:Enterprise and the Cloud》,他曾经在Sun公司担任首席性能和内核工程师。这本书将会为今后的运维工作提供十分有效的帮助,为此本文将作为读书笔记,总结内容,并温故而知新。
译者序
“已知的已知,已知的未知,未知的未知”,现在的应用涉及到复杂的操作系统,各类编程语言,本身就是复杂的实体,无法做到掌握透彻;而系统也无法完全预测和处理外部日益变化的环境,也就是无法预测未来的不确定。所以问题可能来源于任何地方,但你不需要恐惧对待,应该心存敬畏。但要做到不深陷在各种技术知识上,需有全局的系统观,因为技术的最好体现就是系统本身,我们需要对系统的层次和知识有深刻的理解和实践。
1.1 系统性能
系统性能是对整体系统的研究,所有数据路径上和软硬件上发生的事情都可能对性能造成影响。我们需要有一张包含所有组件,数据的示意图来帮助我们理解各组件之间的关系。系统分析时需要了解系统内所有的技术栈:
1.2 人员
性能分析需要多类人参与协同,包括系统运维、网络运维、开发、数据库管理员等,这对他们来说一般是一项兼职的事情,虽然通常他们只会负责和他们自己有关的部分。也会存在性能工程师的工种,他们一般对环境做全局的研究,协同其他部门解决性能问题;分析系统环境来做容量规划。在系统发布前一般会有对应应用的工程师对其做一些性能检查,配置优化等,但是有限。
1.3 事情
性能工作理想流程:
1.设置性能目标和建立性能模型
2.基于软件或者硬件原型进行性能特征归纳
3.对开发代码进行性能分析(软件整合之前)(单元测试?)
4.执行软件非回归性测试(软件发布前或发布后)
5.针对软件发布版本的基准测试(压测)
6.目标环境中的概念验证(Proof-of-concept)测试(预发布)
7.生产环境部署的配置优化
8.监控生产环境中运行的软件
9.特定问题的性能分析