跳转到内容

性能之巅

豆瓣:https://book.douban.com/subject/26586598/

读书笔记

性能排查调试方法:

启发:基于经验和工具列出检查清单,不一定能解决问题,但能快速排查常见问题/瓶颈。

排查前置,问题陈述:

明确问题如何陈述是支持人员开始反映问题时的例行工作。通过询问客户以下问题来完成。

  • 是什么让你认为存在性能问题?
  • 系统之前运行得好吗?
  • 最近有什么改动?软件?硬件?负载?
  • 问题能用延时或者运行时间来表述吗?
  • 问题影响其他的人和应用程序吗(或者仅仅影响的是你)?
  • 环境是怎么样的?用了哪些软件和硬件?是什么版本?是怎样 的配置? 询问这些问题并得到相应的回答通常会立即指向一个根源和解决 方案。因此问题陈述法作为独立的方法收录在此处,而且当你应对一个新的问题时,首先应该使用的就是这个方法。

USE 方法(utilization、saturation、errors)应用于性能研究,用来识别系统瓶颈。一言以蔽之,就是:

对于所有的资源, 查看它的使用率、 饱和度和错误。

这些术语定义如下。

  • 资源 :所有服务器物理元器件(CPU、总线……)。某些软件资源也能算在内,提供有用的指标。
  • 使用率: 在规定的时间间隔内,资源用于服务工作的时间百分比。虽然资源繁忙,但是资源还有能力接受更多的工作,不能接受更多工作的程度被视为饱和度。
  • 饱和度:资源不能再服务更多额外工作的程度, 通常有等待队列。
  • 错误:错误事件的个数。

错误需要调查, 因为它们会损害性能, 如果故障模式是可恢复的,错误可能难以立即察觉。这包括操作失败重试,还有冗余设备池中的设备故障。

USE 方法会将分析引导到一定数量的关键指标上,这样可以尽快地核实所有的系统资源。在此之后,如果还没有找到问题,那么可以 考虑采用其他的方法。

列出资源列表待分析:

用标准的观测工具来检查 系统的组件:CPU、 磁盘、 内存, 等等。 通常是用诸如vmstat(1)、 iostat(1)和mpstat(1)这样的工具起一个的命令行会话来完成的。还有一 些较新的工具通过GUI 支持实时的性能分析(例如, Oracle 的Oracle ZFS Storage Appliance Analytics)。

有些分析工具还具备tracing 或profiling 的功能, 用以对可疑区域做更深层次的检查。做这类深层的分析可能需要定制工具乃至检查源代码(如果可以的话)。大量研究的努力就花在这里,按需要对软件 栈的层次做分离来找出问题的根本原因。 执行这类任务的工具包括 strace(1)、truss(1)、perf 和DTrace。

现代的可视化工具可以通过浏览器和移动设备实时地展现系统的 性能。有许多产品能做到这一点,还有很多产品能够监视你的整个云 环境,如Joyent 公司的云分析、基于DTrace 的云分析工具,这些产品 都提供了包括延时热图的实时可视化功能。