【Linux 系统性能分析】【System Performance读书笔记】——1_系统性能分析是什么要干什么

Introduction

系统性能focus

系统性能考虑的范围从硬件 到操作系统 到库 到应用程序全栈。
如果是分布式系统还需要多个服务器整体考虑。
目的是优化用户的体验。降低计算消耗。
可以:减少低效操作、增加系统吞吐量、tuning。

可以考虑的内容:
用户层: 应用 数据库| 系统库| 编译器
内核层: 内核:进程调度 文件系统 网络栈 虚拟内存 设备驱动

分析切入点

  • workload analysis
    从应用软件给的负载往下深入分析。应用->库->系统调用->内核->硬件设备
  • resource analysis
    从设备资源开始下向上分析。

挑战

  • 技术是客观性的,但是性能好不好基本上是 主观感受。一般我们会设置一些具体的目标来让他变得客观。
  • 系统复杂,缺少明确的分析起始点。并且可能子系统存在交互、共因问题或级联故障。解决一个性能瓶颈可能把问题推给了另外一级。线上线下环境不一样,还难复现。解决性能问题需要很多知识,系统内外很多工具。
  • 不只一个root cause。 问题有很多造成因素
  • 性能issue太多了,有很多甚至是已知但是不修的。这时候分辨关键的性能issue很重要。

Latency 延时

延时是重要的性能指标,表示完成任何一个操作的时间。
延时需要具体的限定条件,描述是什么部分的延时。

可观测性 Observability

三大工具:

  • counter
  • profiling
  • tracing
    不包括benchmark tools(比如加负载,主动改变系统状态)

Counters, Statistics, and Metrics.

系统里面有各种计数器
以硬件或者软件的方式提供各种统计数据。次数、百分比、平均数等等。
设定一个指标,隔一段时间监控一次。超过就报警。是常用手段。也可以画图来可视化。
举例:
vmstat指令,读取/proc下的计数器,可以画表,显示CPU占用。
其他人可能做工具套在外面,实现可视化(比如曲线图)。
还有人可能在可视化外面再套一层,来做alert.

有时候,与时间关联的metric有用,比如你看到某个软件状态变了或则配置变化的时候指标发生变化。可以找到问题。
但很多时候,metric只能说告诉你系统的某一块现在有问题,却没法告诉你原因

Profiling

按照一定时间间隔周期性采样,绘制目标的粗略特性图。
比如:周期采集on-cpu的质量路径
火焰图就是个例子

Tracing

Tracing是基于事件的记录。
基于特殊目的:

  • 系统调用:Linux Strace
  • 网络packets: Linux tcpdump

通用的可以分析可执行文件和硬件事件的:

  • Linux Ftrace
  • BCC
  • bpftrace

Static Instrumentation
在源代码中写死的软件指令。或者说监测点。
在Linux 内核中有很多,磁盘IO 调度器事件、系统调用等等很多。在Linux里面叫做 trace points。
用户应用程序里也有类型的机制,叫USDT( user statically defined tracing )。这主要是通过库来实现,比如libc。
例子:
execsnoop可以打印在tracing期间,检测到的execve这个系统调用的tracepoint。来显示新进程创建。这个对短寿命进程很有用。

Dynamic Instrumentation

所谓动态,指的是在软件运行的过程中,在已经存在于内存中的指令之中插入监控的指令。这有点类似于调试器在代码运行过程中插入断点。断点会把程序流指向调试器,但是dynamic instumentation是把插入的routine走完之后回到应用程序代码继续执行。

BPF

目前风头最盛的Linux动态tracing工具。

他在内核里植入了一个小型的虚拟机来加速tcpdump。2013年开始被扩展为eBPF。成为了一套内核环境,可以安全快速地访问资源。

具有 BCC(BPF Compiler Collection)编译器和bpftrace(前端)。前面的execsnoop就是大佬Brendan基于这个做的小工具.

实验

与观测工具相对的, 是实验工具.大多数是前面所说的benchmark工具.

benchmark工具分为宏观的和微观的.

宏观: 系统整体表现,比如车跑某赛道一圈的时间.

微观:针对某一特定对象的属性,比如最高车速.

观测和实验,是性能分析的两只手.不能只用一只手解决问题.

云计算

在云计算时代,清楚的知道自己要多少资源,需要购买多少云服务,直接就可以省钱.

带来的问题是,某一个人申请的云虚拟资源,可能在物理上和附近的其它人的云服务器公用磁盘IO这样的硬件资源。会受到莫名其妙的影响。并且不好分析。

Linux Perf Analysis in 60 Seconds

Table 1.1 Linux 60-second analysis checklist

ToolCheck
uptime平均负载,查看负载增减趋势
dmesg -T|tail内核错误及OOM(out of meory)事件
vmstat -SM 1系统整体统计数据, run queue length, swapping, overall CPU usage.
mpstat -P ALL 1Per-CPU balance: a single busy CPU can indicate poor thread scaling.
pidstat 1每个进程的CPU占用,识别不需要的CPU消耗,以及用户/系统 各个进程的CPU时间。
iostat -sxz 1磁盘IO统计,IOPS和吞吐量,平均等待时间,percent busy。
free -m包括文件系统在内的存储使用
sar -n DEV 1网络设备IO,包和吞吐量
sar -n TCP,ETCP 1TCP 统计,连接率 retransmits
topoverview
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羊苏C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值