《system performance》&《BPF PerformanceTools》读书笔记(二)策略及方法论

性能问题分析思路

在复杂环境下面对性能问题有时总让人无从下手,书中列举的一系列策略,展示了从哪里开始,以什么步骤开始一次性能分析,给性能分析提供了大量思路。从看到性能问题到最终解决同样是一个漫长的过程,有时候是需要一些灵感的,两本书都深入各个子系统,给出了大量可造作的分析建议,当问题一筹莫展时候回顾一下这些内容,往往能产生一些新的思路和灵感。

1.问题陈述

《system performance》&《BPF PerformanceTools》读书笔记(二)策略及方法论_第1张图片

作者是专职的performance engineer,日常工作是解决其他团队遇到的问题,分析的第一步就是要了解问题的大致情况,依赖哪些数据认定这是性能问题?之前有遇到这种问题吗?最近有什么变动?等等,这是分析的正常逻辑。但对于我们大部分开发人员分析自己熟悉的模块或者系统时往往忽略了这个问题,回想是不是有经历过这种场景,拿到问题先一顿分析,最后发现只是配置参数或者版本不对,简单的问题却浪费了不少时间。遇到问题先别着急直接分析,问问这些问题,往往能快速得到一些明显的线索。

2.USE分析法

《system performance》&《BPF PerformanceTools》读书笔记(二)策略及方法论_第2张图片

对系统用到的软硬件资源进行梳理,针对每个资源检查:

  • 利用率,资源的繁忙程度,单位时间内该资源有多少时间是在工作中。
  • 饱和度,资源因为任务太多处理不过来,而放入队列内等待。
  • 错误,发生了什么错误,多少次。

分析性能前先提问自己是否能在目标环境下对系统用到的资源进行测量,如果不能就制作工具补全盲点。

《system performance》&《BPF PerformanceTools》读书笔记(二)策略及方法论_第3张图片

USE分析是贯穿两本书的核心分析策略之一,在初步分析性能问题时,用于定位瓶颈的大致位置。

从全书整体的方法论来看,作者把性能“观察”放到了很高的地位,在他看来解决性能问题或者进行调优的基础是能够直观快速的看到调整带来的效果,为此作者开发了大量的性能监测工具,也对内核跟踪的各类工具贡献了很多代码。

3.负载描述

《system performance》&《BPF PerformanceTools》读书笔记(二)策略及方法论_第4张图片

负责描述,同样是两书都提到的核心策略。在对负责进行全面详细的描述过程中,经常能发现一些线索及规律。即使是很熟悉的系统及业务,分析负载也是必要的,应用bug,网络攻击等产生的意想不到的负载往往是造成性能问题的原因。

4.Drill-down Analysis

《system performance》&《BPF PerformanceTools》读书笔记(二)策略及方法论_第5张图片

一种逐层深入的分析思路,由上到下,按照观测,假设,确认的步骤,逐层向下分析,直到找到影响性能的主因。

5.基准数据统计

《system performance》&《BPF PerformanceTools》读书笔记(二)策略及方法论_第6张图片

对比是定位问题的好方法,对比系统之前的表现,或者对比同样环境业务的其他设备。观察负载,资源使用,以及最终表现出的性能数据,往往会带来一些启发。对系统的性能数据进行统计是很有必要的,综合历史数据可以得出一个基准,当发现性能有变化时能够知道是不是问题,影响有多大。

6.最有效的优化方法---删掉不必要的工作

 

checklist

性能分析涉及到的工具及命令繁多难免有时会遗漏,使用checklist来梳理分析步骤十分有用,作者展示了他日常工作用到的checklist

Linux 60-Second analysis

1.uptime

系统负载, runing 和uninterrapted 状态进程的数量。

2.dmesg | tail

是否有异常错误信息

3.vmstat 1

内存 , cpu , IO , swap 等总览

4.mpstat -P ALL 1

CPU消耗总览,各cpu消耗是否平均,有无消耗突出的模块

5.pidstat 1 /pidstat -w 1

各进程对CPU的消耗,上下文切换

6.iostat -xz 1

磁盘总体数据 , 延时 , util , 带宽等

7.free -m

总体内存数据

8.sar -n DEV 1

网卡的带宽,收发包速率

9.sar -n TCP,ETCP,UDP 1

tcp连接建立速率 , UDP 发送速率?

10.top

总览

BCCTool Checklist

1.execsnoop

跟踪新启动的进程,是否有过多short-lived进程影响性能问题

2.opensnoop

跟踪open系统调用,关注进程访问文件的行为,看是否有频繁open的操作,访问不存在的文件

3.ext4slower fileslow

查看read write 操作延时大的进程

4.biolatency

统计系统整体IO 延时分布

5.biosnoop

统计各进程的IO延时,关注延时过大的进程,以及不应该有的IO

6.cachestat

pagecache 使用及命中率

7.tcpconnect

跟踪connect()调用,列出每一条tcp链接,关注是否有异常的链接

8.tcpaccept

跟踪accept()调用,列出每一条tcp链接,关注是否有异常的链接

9.tcpretrans

列出tcp重传的包

10.runqlat

统计线程等待cpu调度的时间

 

你可能感兴趣的:(《system performance》&《BPF PerformanceTools》读书笔记(二)策略及方法论)