前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用USE Method分析系统性能问题

使用USE Method分析系统性能问题

作者头像
mazhen
发布2023-11-23 21:09:15
1360
发布2023-11-23 21:09:15
举报
文章被收录于专栏:mazhen.techmazhen.tech

遇到性能问题怎么分析定位?这个问题太难回答了,各种底层环境、依赖系统、业务场景,怎么可能有统一的答案。于是产生了各种分析性能问题的“流派”。两个典型的 ANTI-METHODOLOGIES:

  • blame-someone-else 使用此方法的人遵循下列步骤:
    1. 找到一个不是他负责的系统或环境
    2. 假定问题和这个组件有关
    3. 将问题转交个负责这个组件的团队
    4. 如果证明是错误的,重复步骤1
  • 路灯法 没有系统的方法论,只是使用自己擅长的工具去观察,而不管问题到底出现在哪儿。就像丢了钥匙的人去路灯下寻找,仅仅是因为路灯下比较亮。这种行为被称为路灯效应

相信很多同学已经脑补出上述的两个场景,他们的行为模式让人抓狂。于是有聪明人总结出了《The USE Method》。USE是Utilization,Saturation 和 Errors的缩写,简单说USE是一套分析系统性能问题的方法论,具体表现为一个checklist,分析过程就是对照checklist一项项检查,希望能快速定位瓶颈资源或错误。

初看这个方法感觉有点太简单了吧,这也能称为方法论?不过这确实体现出了老外的做事风格,任何事情都会去做定量分析,力求逻辑完整。而我们往往讳莫高深的一笑,只可意会不可言传。

简单介绍下USE,详细内容推荐看这篇《The USE Method》。USE的一句话总结:

For every resource, check utilization, saturation, and errors.

术语解释

  • resource:CPU,内存,磁盘,网络等一切物理设备资源
  • utilization:资源利用率。例如CPU的资源利用率90%
  • saturation:当资源繁忙时仍能接收新的任务,这些额外的任务一般都放入了等待队列。saturation就表现为队列的长度,例如CPU的平均运行队列为4(Linux上使用vmstat命令获得)。
  • errors:系统的错误报告数,例如TCP监听队列overflowed次数。

列出系统中的所有资源,然后逐项检查利用率、等待队列和错误数,就这么简单!下表是一个范例:

resource

type

metric

CPU

utilization

CPU utilization (either per-CPU or a system-wide average)

CPU

saturation

run-queue length

Memory capacity

utilization

available free memory (system-wide)

Memory capacity

saturation

anonymous paging or thread swapping

Network interface

utilization

RX/TX throughput / max bandwidth Storage

Storage device I/O

utilization

device busy percent

Storage device I/O

saturation

wait queue length

Storage device I/O

errors

device errors (“soft”, “hard”, …)

对于资源测量数据的解读,作者给了一些建议,例如:资源利用率100%肯定表示该资源是系统瓶颈,70%以上的利用率就要引起足够的重视,一般IO设备利用率高于70%,响应时间将大幅上升。资源等待队列大于0意味着可能存在问题。资源的任何错误计数,都值得仔细调查,特别是当性能变差时,错误计数在上升。

要使用这个方法,你还需要一份完整的资源列表,一般的系统资源包括:

  • CPUs: sockets, cores, hardware threads (virtual CPUs)
  • Memory: capacity
  • Network interfaces
  • Storage devices: I/O, capacity
  • Controllers: storage, network cards
  • Interconnects: CPUs, memory, I/O

作者很厚道的按照每种操作系统给出了checklist,重点关注《USE Method: Linux Performance Checklist》,不仅列出了资源,而且告诉你如何进行测量。例如CPU运行队列的测量:

system-wide: vmstat 1, “r” > CPU count [2]; sar -q, “runq-sz” > CPU count; dstat -p, “run” > CPU count; per-process: /proc/PID/schedstat 2nd field (sched_info.run_delay); perf sched latency (shows “Average” and “Maximum” delay per-schedule); dynamic tracing, eg, SystemTap schedtimes.stp “queued(us)”

根据作者的实践经验,使用USE方法解决了80%的性能问题,只付出了5%的努力,当考虑了所有的资源,你不太可能忽视任何问题。简单有效!

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com