《性能之巅》阅读总结


对《性能之巅》关键内容进行总结,按个人的理解进行了重新排序分解。(部分内容更新中)
大神的博客:http://www.brendangregg.com/blog/

一、性能分析概念

性能定义与权衡要素

系统性能是对整个系统的研究,包含了软硬件和整个软件栈。
性能工程是有一个非常挑战的工作,系统性能是主观、复杂的、而且常常是多个问题并存的。
已知的已知,已知的未知,未知的未知,性能领域 “你知道的越多,你不知道的就越多”
在这里插入图片描述

性能的扩展性(负载增加性能变化)

负载增加下的系统体现的性能表示扩展性。典型曲线如下。前期扩展性往往都是线性变化,当负载到某点开始(比如某个组件达到100%使用率),此时对于资源争夺开始影响性能,随着争夺加剧会偏离线性扩展(如CPU接近100%使用率,调度延时增加,性能下降,导致更多的上下文切换,实际完成任务会变小;内存负载过高,系统开始通过swap或者换页来补充内存,性能快速下降;或者磁盘IO负载过高,发生大量排队;某个资源不可用,任务申请某个资源失败,发生工作任务大量重排)。
在这里插入图片描述

性能权衡三角关系

在 好 (性能优秀) / 快(项目周期短,即时性高) / 便宜 (整体成本)三者择 其二 。许多项目都选择了即使和便宜,应用程序开发和测试都倾向于功能正确性,留给性能测试和优化时间非常少。只有当性能变成问题时,才会投入做性能相关的事情。

性能投资回报率

不同公司,不同项目,对系统性能设计是不同的,没有对错之分 只有 是否合适,也就是 投资回报率如何。大型数据中心公司会需要一个性能工程师团队分析性能,保持内核与CPU性能、运用各种动态跟踪技术,建立性能模型进行预期测试。小的创业公司可能只需要做浅层次的检查,用第三方监控工具进行性能检查和报警。

性能分析困难原因

1、与功能特性相比,系统性能特性 常常是非常主观的。对问题判断可能是模糊的,修复的时候也是一样。只有通过明确清晰目标比如 响应时间2ms内,才能把主观的性能客观化。
2、系统本身的复杂度,相互影响关联,让问题很难找到起点,只能从猜想开始。 到底是网络、硬盘、内存、CPU还是软件,一个故障的出现往往会导致其他组件产生性能问题,要理解问题产生原因,必须要理清楚组件之间的关联。必须要掌握全局性的方法。(要求广泛的技能组合,通常需要多人协同进行工程实施)
3、性能问题可能多个问题并存,解决一个问题后马上热点就会进行转移,你必须要识别哪些问题是最重要的。 每个组件内部可能都存在多个性能问题,但是可能你解决某个性能问题后 系统性能瓶颈马上就转移到另一个模块。
4、扰动对性能测试结果影响。 扰动包括 定时执行的系统活动,系统其他用户及其他工作负载,扰动来源可能不清楚,需要细致的系统研究才能确定。如 输入处理工作负载,包括 负载平衡、web服务器、数据库服务器、应用程序服务器、存储系统 都可能成为扰动源。
5、环境的性能特性会随着时间改变,更多的用户,新的硬件、升级的软件或者固件都是变化因素。 比如一个原先受限与1Gb/s网络基础设施,当升级到10Gb/s时,很可能会发现磁盘或者CPU的性能变成紧张。某些网上推荐的可调参数设置,可能对于你系统的负载并不合适,反而引起性能恶化。

产品性能领域典型事项

产品研发过程的性能领域常见事项,常见的执行顺序如下:
1)设置性能目标和建立性能模型。(硬件选型、软件开发之前)
2)基于软件或硬件原型进行性能特征归纳。
3)对开发代码进行性能分析(软件整合之前)
4)执行软件非回归性测试(软件发布前或者发布后)
5)针对软件发布版本的基准测试
6)目标环境中的概念验证(Proof-of-concept)测试
7)生产环境部署的配置优化
8)监控生产环境中运行的软件
9)特定问题的性能分析

二、性能分析方法

性能分析思路视角

性能分析事件常见两个视角:
a 负载分析:利用工作负载下应用程序的响应情况,如请求的延时、完成度、吞吐量;
b 资源分析:利用系统资源分析为起点,如CPU、内存、磁盘、网卡、总线以及之间的互联。

性能分析常见指标

1、 响应时间 / 延时 (重要)
响应时间,一次操作完成时间。包括用于等待和服务的时间,和 返回结果的时间。延时,描述操作里面用力啊等待服务的时间,有时也用来描述整个操作时间,相当于响应时间。
其他指标也可以转化为延时或者时间,这样可以对行为进行预判对比,以下为某一个3.2GHz CPU执行寄存器开始,执行行为的时间量级差别。
在这里插入图片描述
2、吞吐量 (重要):评价工作执行效率,尤其是在数据传输方法,常用来描述数据传输速度(字节/秒或者bit/秒)。
3、IOPS:每秒发生的输入/输出操作次数,是数据传输的一个度量方法。对于磁盘,就是值每秒读写的次数
4、 使用率 / 非空闲时间:对于服务所请求的资源,使用率描述在所给定时间区间内资源的繁忙程度,如内存使用率。
5、开销:性能指标不是免费的,很多时候,性能检查都会消耗一些CPU周期来收集和保持指令信息(观察者效应)。

性能分析典型方法举例

注意,下面某个方法很可能同时属于几个类型,没有必然的界限。
1、信息收集类
(1)为什么觉得有性能问题?之前正常么?最近有什么改动(软件、硬件、负载)?问题影响其他人和应程序码(还是仅仅是你)?环境/配置/版本情况如何?—问题陈述法
2、观测分析类:
(1)使用熟悉的性能工具 试错式的反复摸索测试,如使习惯性用top查看—街灯讹方法
(2)列出可能用到性能工具,每一个工具列出有用的指标,对每一个指标阐释可能规则(完整,但是效率低)—工具法
(3)问题-假设-预测-实验-分析—科学分析法
(4)列出所有资源 如 硬件部分cpu、内存、网络、存储、互联,查看它的使用率、饱和度、错误,软件资源 互斥锁 (使用率:持有使用时间、饱和度:等锁时间)、线程池(使用率:忙处理时间、饱和度:等线程池服务请求数目)、进程线程容量—USE方法
(5)专注系统输入,负载谁产生,负载为什么被调用,负载的特征有哪些,负载随时间变化如何—工作负载特征归纳法
(6)把延时时间细化 进行量化分析 哪一段耗时过高,是否存在延时问题?请求时间在CPU上么?还是在等待处理?I/O时间是在访问磁盘还是锁竞争上?磁盘时间是在随机寻址部分还是数据传输部分—延时分析法
3、假设分析类:
(1)随机猜测问题可能存在的位置,改动然后测试直到问题消失—随机变动讹方法

三、性能分析关键要素

应用程序

性能调整工作正常情况下是离执行的地方越精越好。从应用角度,你需要理解的概念有。
功能:应用程序的角色是什么?数据库、web服务器、负载均衡、文件服务器 还是 对象存储。
操作: 应用程序服务有哪些?执行什么样的操作。查询数据库?http请求处理?
CPU模式:应用程序是内核态还是用户态软件。
配置 : 应用程序如何配置的?检查与性能相关的参数有哪些?包括缓冲区大小,缓存大小,并发和其他选项。
指标:有没有可用的应用程序指标,比如延时?有可能是自带的工具或者第三方工具。
日志:应用程序能启动什么日志?哪些性能指标,比如延时能从日志中得到。
版本:应用程序最新版本是多少?在最近的版本发布说明有没有提及性能的修复或者提升。
bugs : 当前应用程序有bug数据库码?是否有性能bug?

设置性能目标

针对应用程序需要设置性能目标为性能分析工作指明方向。参见的考虑目标有:1 延时、2 吞吐量、3 资源使用率
一般需要进行量化操作,从业务角度或者服务质量需求衍生出指标 进行量化 比如:
1、应用程序平局延时5ms;2、95%的请求延时控制在80ms或一下;3、异常延时,超过1000m延时请求为0;4、最大吞吐量每台服务器最少10000次应用请求/秒;

常见优化思路

1、常见的优化思路是集中分析 工作负载的公用代码路径,如果是CPU密集型,意味着代码路径会频繁暂用CPU。如果I/O密集1型,需要集中分析频繁I/O访问的代码路径。
2、性能优化是一个长期的工作,性能可观测性非常重要。特别是应用程序有重要的性能基准时候,在早期投入更多工作到性能观测工具支持上去,比投入提升一部分性能更有价值。

典型应用程序性能技术

1、选择I/O大小:执行I/O开销包括 初始化缓冲、系统调用、上下文切换、分配内核元数据、执行内核驱动等,从效率上看,每次I/O传输的数据越多效率越高、特别是磁盘访问。
2、缓存:操作系统用缓冲提高文件系统读性能,应用程序也可以使用类似缓存的机制,将执行结果保留缓存备用。
3、缓冲区:为提高写性能,数据在送入下一层之前会合并在缓冲区,提升了I/O效率,类似组件之间也可以用同样方式异步发送数据。
4、轮询:轮询是等待事件循环检查状态的设计,两次检查之间有停顿,可以把轮询查询改为poll机制降低性能负担。
5、并行:分时系统支持程序并发,为了利用多处理器系统优势,应用程序需要在同一时间运行在多颗CPU上,称为并行,通过多进程或者多线程实现。(同步原语:mutex信号量、自旋锁、读写锁等)
6、非阻塞I/O:进程在I/O期间会阻塞进入sleep状态,引起上下文切换,当多路并发代价会较大,通过非阻塞设计可以异步的进行I/O处理,让线程保持轮转。
7、处理器绑定:把应用程序绑定到一个CPU上能提升应用程序内存本地性能,减少内存I/O.
8、语言选择与编译优化

操作系统基础

操作系统:安装在系统上的软件和文件,使得系统可以启动和运行程序。典型要素包括内核、管理工具 以及 系统库。
理解操作系统和它的内核对于系统性分析至关重要,你需要知道的基础概念如下。

内核、内核空间/用户空间

内核是管理系统的程序,包括硬件设备,内存和CPU调度。内核的执行运行在CPU特权模式,可以直接访问硬件。内核内存地址空间叫内核空间,进程的内存地址空间叫用户空间。软件在用户态和内核态都有自己执行的软件上下文,包括栈和寄存器。
1) tick时钟:UNIX内核一个核心逐渐是clock(),从一个计时器中断执行,常见每秒执行60100或者1000次。每次称为一个tick。功能包括更新系统时间、计时器和线程调度事件片结束、维护CPU统计数据等。注意如果tick是100Hz、线程调度需要等到下一个tick,延时粒度可能会长达10ms。
在这里插入图片描述

任务/进程/线程、上下文切换

在linux一个可运行的实体叫任务,可以是进程(单线程)或者多线程进程的一个线程。
进程 是OS执行流抽象概念,拥有独立的地址空间、文件描述符、线程栈和寄存器,通常运行在用户态,通过系统调用陷入内核态。通过PID来标识一个进程。进程创建通过系统调用fork完成,对一个进行自身进行复制,然后通过exec才能执行不同的程序。fork使用copy-on-write策略体提高性能,只有当进程需要修改被引用的内存时,才会建立独立副本,相当于推迟了copy动作 减少内存和CPU使用
线程是可被调度的运行在CPU上的可执行上下文,内核存在多个自己的线程,每个进程也可以有多个线程。
内核切换CPU让其在不同地址空间(不同任务)操作 叫做上下文切换

中断 、中断 上半部/下半部。

内核除了响应系统调用外,也要响应系统请求也叫中断。通过注册在系统的 中断服务程序 来运行需要完成的操作。中断执行程序特点是运行尽可能快,它会抢占CPU直到执行结束,要减少对线程活动中断影响。
内核提出 上半部(必须在中断马上执行的内容,比如读取设备状态,配置必要响应,这个阶段会推迟新中断) 和 下半部(通过内核task、工作队列等 延后调度工作来处理 不需要即时处理的内容,比如 周期性软算法计算等) 来优化影响。

内存管理

CPU

cpu通常是系统分析的首要目标,现代系统一般是多核CPU,通过调度共享给运行的软件。cpu需要理解的概念:
在这里插入图片描述

核、逻辑cpu、硬件线程:一个多核处理器上每个独立CPU实例叫一个核心;硬件线程是支持在一个核上同时执行多个线程的CPU架构,每个线程是一个独立CPU实例(也叫虚拟核)。逻辑CPU也叫虚拟CPU,指代一个操作系统可调度的CPU实体。如下图,单个处理器有4个核、8个硬件线程,操作系统看来有8个逻辑CPU;
在这里插入图片描述
硬件缓存、缓存一致性:为了提高CPU内存I/O性能,处理器提供如L1、L2、L3多层硬件缓存,CPU访问DDR前会先查找缓存中有没有,如果存在就是命中,命中率 = 命中次数 / (命中次数 + miss失败次数),利用缓存提搞CPU访问内存的效率。缓存一致性指内存可能被同时缓存在多个CPU里面,当一个修改,全部缓存必须知道它们的缓存失效要丢弃。
字长:表示处理器地址空间大小和数据通路宽度,也叫位宽。更宽字长 以为着更好的性能。
MMU地址转化、TLB :MMU负责虚拟地址到物理地址转化,MMU通过TLB缓存地址转查看主存中转换表,也叫页表,处理缓存未命中情况。
在这里插入图片描述

时钟频率、动态调频:每个CPU指令都花费一个或多个时钟周期,CPU以一个特定的时钟频率执行,如5GHz的CPU。部分CPU可以改变时钟频率,根据系统需求变化用于提高性能或者降低功耗。
指令、指令流水线、指令宽度 :cpu执行指令集合中的指令,一般包括:1、指令预取 2、指令解码 3、执行 (4、内存访问、5 寄存器会写),每一步都至少需要一个时钟周期,如果涉及内存访问,通常需要十几个时钟周期来读写主存,CPU缓存的目的就是降低这一步损耗。 指令流水线是一种CPU架构通过执行不同指令不同部分,达到同时执行多个指令的结果,类似组装生产线,同时执行部分步骤提高吞吐量。指令宽度 是指通过多个同类型功能单元参与 每个时钟周期处理更多指令,现代处理器一般宽度为3或者4,通常和流水线一起使用提升吞吐量。
每指令周期数CPI、每周期指令数IPC :CPI是一个重要性能指标,描述CPU时钟周期使用率,CPI较高表示CPU经常陷入停滞,通常都是在访问内存。针对内存访问密集的负载,可以通过:1、使用更快的内存 2、提高内存本地性 3、减少内存I/O数量。,这个时候提升CPU频率不能达到性能预期目标,因为需要等待内存时间相同,会出现更多CPU停滞周期。
使用率、用户时间/内核时间:通过检查一段时间CPU的忙时间比获得,和其他类型资源(如磁盘、内存)相比,高CPU使用率不一定引起性能显著下降,由于内核支持优先级、抢占、分时共享(可以决定任务优先级)。CPU花在用户态和内核态执行时间分为 用户时间/内核时间。
饱和度、CPU运行队列、调度器延时、负载均衡 : 一个100%使用率的CPU称饱和的,线程在这种情况会碰上调度延时。每个逻辑CPU上都有内核调度器管理的运行队列,正在排队和就绪处理的线程数量标识了CPU饱和度这个重要指标。花在等待CPU运行事件上的时间也称为调度器延时。CPU运行对列中每个优先级也有自己的运行的队列,负载均衡也可以把运行的线程移到空闲或者不繁忙的CPU队列中。
抢占、优先级反转:CPU运行更高优先级的线程抢占当前正在运行的线程,并开始执行。优先级反转 值一个低优先级的线程拥有了一项系统资源,从而阻塞了高优先级线程运行清理。
在这里插入图片描述
典型CPU调度策略
1、Linux内核调度类:RT 实时类负载提供固定的高优先级,支持内核和用户态抢占。CFS linux 2.6.23引入完全公平调度作为默认用户进程分时调度器,使用红黑树取代队列管理,以任务的CPU时间作为键值,是CPU少量的消费者相对负载型更容查找,提供交互和I/O消耗型负载性能;
2、用户进程调度策略:RR 轮转调度,线程使用完时间片切到运行队列尾部。FIFO 先进先出调度,一直运行队列头直到退出或者更高优先级线程抵达。NORMAL 默认分时调度,动态调整调度优先级,O(1)时间片长度根据静态优先级设置,CFG 时间片动态调整。
常见CPU性能指标测试
CPU常见的性能计数器:CPU周期(停滞周期和类型)、CPU指令、CPU各级缓存命中/未命中、浮点单元操作、内存I/O(读、写、停滞周期)、资源I/O(读、写、停滞周期)。

内存

系统主存存储应用程序指令,和它们的工作数据,以及文件系统缓存。二级存储设备 磁盘 处理速度比内存低几个数量级,一旦主存填满,就需要和二级存储设备交换数据,这个过程常常称为系统瓶颈。其他重点考察因素,如 分配释放内存、复制内存以及管理内存地址空间映射开销。常见概念:
主存、虚拟内存、匿名内存、常驻内存:主存也叫物理内存,通常是动态随机访问内存DRAM;虚拟内存是一个抽象的主存概念,系统向每个进程提供巨大的、线性的并且私有的地址空间;常驻内存:当前处于主存的内存;匿名内存,无文件系统位置或者路径名称内存,包括进程地址空间的工作数据,堆。
页、缺页、换页、交换:操作系统和CPU使用的内存单元叫页,常见是4KB或者8KB大小;缺页,无效内存访问,使用虚拟内存,正常发生这种事件;换页,在主存与存储设备之间交换页;交换,UNIX指整个进程重主存转移到交换设备,Linux指页面转移到交换设备。内存
按需换页,过度提交:按需换页是指 操作系统将虚拟内存按需映射到物理内存,把CPU创建映射的开销推迟到实际需要访问时,而不是初次分配着部分内存映射;Linux支持过度提交,即允许 分配超过系统可以存储的内存(物理内存与交互设备总和),依赖与按需换页以及应用抽象通常不会使用分配给它们的大部分内存。
文件系统缓存占用:系统启动之后内存占用量持续增加时正常的,操作系统会将可用的内存用于文件系统缓存以提高性能。如果有可用的主内存,就有效的使用,当程序需要时,内核很快能从文件系统缓存释放内存;
使用率与饱和度 : 主存使用率由 占用内存(不包含文件系统缓存内存) / 总内存;内存使用需求超过主存 称为 主存饱和,这时操作系统会使用换页、交换、OOM终结者搜索并杀死可牺牲的进程 等行为来释放内存。
字长:处理器支持多种字长,32位和64位应用程序可用同时运行,地址空间受限与寻址空间,32位地址空间最大4GB大小。

分配器介绍

管理内存申请释放称为分配器,操作系统一般有多种用户级和内核级的适配器用于内存管理。
分配器典型特性:1、简单API 2、高效内存使用(内存碎片应对)3、性能,内存申请非常频繁 4、可观测性。
内核slab分配器 :管理特定大小的对象缓存,使它们能快速回收利用,避免页分配开销。
内核slub分配器:基于slab并且解决多个问题设计,降低复杂性,包括移除对象队列,以及每个CPU缓存等。
GNU的用户态libc分配器:基于dlmalloc,分配请求长度,较小的内存分配来自内存集合,包括伙伴关系算法合并长度近似单位,较大分配用树高效搜索空间。非常大内存分配转到mmap()。

文件系统

文件系统:一种把数据组织成文件和目录的存储方式,提供了基于文件的存储接口,并通过对文件权限控制访问,同时包括一些 如设备、套接字、管道等特殊文件类型等。
文件系统通过缓存、缓冲、以及异步I/O等手段来缓和磁盘的延时对应用程序的影响,文件系统的性能经常比磁盘性能更为重要。
在这里插入图片描述
涉及概念:
文件系统缓存:主存的一块区域,用来缓存文件系统内容;
操作、逻辑I/O、物理I/O、裸I/O、直接I/O:对文件系统的操作主要涉及 read、write、open、close、stat、mkdir等。逻辑I/O是由应用程序给文件系统的I/O,物理I/O是文件系统直接发给磁盘的I/O;裸I/O表示应用程序绕过文件系统直接访问磁盘,更快,但是不利于管理或者监控;直接I/O表示 应用绕过缓存使用文件系统,直接通过文件系统写入磁盘。
inode:一个索引节点是一种含有文件系统对象元数据的数据结构,如访问权限、时间戳、数据指针等。
虚拟文件系统VFS:虚拟文件系统 是一个为了抽象与支持不同文件系统类型的内核接口。
预取/预读、回写缓存 : 对于一些大文件顺序读取I/O,如文件系统备份,数据量太大放不进缓存或者只读一次无法在缓存里保留,这样引起缓存命中率偏低。预取 是 通过检查当前和上一个I/O文件偏移量判断释放在连续读取,做出预测 在程序请求前向磁盘发出读命令填充文件系统缓存。Linux广泛运用写缓存提高写性能,当数据写入主存后就立即返回,之后再异步刷新写入磁盘。
内存映射文件:通过把文件映射到地址空间,并直接存取内存地址方法来提高文件系统读写性能,这样可以避免调用read、write存取文件数据产生的系统调用和上下文切换开销,通过mmap创建。

磁盘

硬盘I/O是系统性能分析一个重要的目标。磁盘一般指主要存储设备,包括 旋转式磁性盘片 和 基于闪存的固态盘SSD。相关概念:
虚拟磁盘:对存储设备的模拟,可能由多块物理磁盘构成。
传输总线:用来通信的物理总线,包括数据传输和其他磁盘命令。
扇区:磁盘上的一个存储块,通常是512B大小。
磁盘I/O、I/O延时、磁盘命令:针对磁盘的读写,至少包含 方向(读/写)、磁盘地址、大小;一个I/O操作执行时间就是磁盘I/O延时;除了读写外、磁盘还有其他非数据传输命令,如缓存写回。
吞吐量、带宽:吞吐量 指 当前数据传输的速率 B/s;带宽指存储传输吞吐量达到的最大数据传输速率;
控制器、传输总线与存储总线:CPU I/O传输总线和存储总线以及相连的磁盘设备桥接起来,这个设备称为 主机总线适配器HBA; 整个系统的瓶颈可能限制其中任何一个组件,总线、控制器、磁盘;
在这里插入图片描述
随机 与 连续 I/O: 从连续访问磁盘I/O相对位置,分为连续访问和随机访问,如果是旋转磁盘,随机访问过程磁头寻道和盘片旋转引起额外延时明显,需要优化减少实际路径距离。其他类型如闪存SSD,差异很小基本没有区别。
I/O大小,使用率,饱和度:和内存类似。

磁盘I/O延时时间尺度示例:
在这里插入图片描述

网络(待更新)

随着系统分布化进展,尤其云计算环境中,网络在性能方面越来越重要。

四、性能分析观测工具(需要细化)

Linux操作系统提供过许多工具观察测试系统的软件和硬件。下图为linux相关工具全景图,这些工具可以划分为 计数器、跟踪、剖析、监控 类别(很多工具都是跨多个类支持的)。
在这里插入图片描述
各种测试工具观测来源:
在这里插入图片描述

计数器类工具

内核提供了各种统计数据,称为计数器,用于对事件的记录。如网络包接受计数其、磁盘I/O发生计数器、调用执行计数器。计数器使用由于默认开启,始终由内核维护,可以认为“零开销”。
a 系统级别 :
vmstat:系统级别,虚拟内存和物理内存统计。
mpstat:每个CPU的使用情况
iostat:每个磁盘I/O使用情况,由块设备接口报告;
netstat:网络接口统计,TCP/IP栈的统计、每个连接的一些统计信息。
sar:各种各样的统计、能归档历史数据。
b 进程级别
ps:进程状态,显示进程的各种统计信息,包括内存和CPU使用;
top:按一个统计数据(如CPU使用)排序,显示排名高的进程。
pmap:将进程的内存段和使用统计信息一起列出。
一般来说,上述工具都是从 /proc 文件系统读取统计信息。

跟踪类工具

跟踪收集每一个事件的数据进行分析,常见默认关闭,打开后跟踪捕获数据存在CPU开销,保存数据也需要内存空间开销。
日志,如系统日志,可以认为是一种针对偶发事件默认开启的低频跟踪。
a 系统级别 :
tcpdump:网络包跟踪
blktrace:块I/O跟踪(Linux)
DTrace/SystemTap:跟踪内核内部活动和所有资源的使用情况(不只是网络和块I/O),支持静态和动态跟踪。
perf:Linux性能事件、跟踪静态和动态探针。
b 进程级别
strace:基于Linux系统的系统调用跟踪。
gdb:源代码级别的调试器,广泛应用与linux系统。
DTrace/SystemTap/perf这样的工具,也都支持单个进程检查。

剖析类工具

剖析通过对目标收集采样或者快照来归纳目标特征。如CPU使用率、对程序计数器采样 或者 跟踪栈来找到消耗CPU周期的代码路径。剖析也能基于非计时硬件事件,如CPU硬件缓存为命中或者总线活动,显示那条代码路径负责任,帮助针对系统资源优化代码。典型有:
oprofile:Linux系统剖析;
perf:Linux性能工具集合,包含剖析命令;
DTrace/SystemStap:程序化剖析,基于时间或者硬件事件。

监控类工具

最广泛用于监视单一操作系统工具是star。基于计数器,在预定的时间通过cron执行已记录系统计数器状态。支持命令行查看。

猜你喜欢

转载自blog.csdn.net/runafterhit/article/details/108012850
今日推荐