准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术

article/2025/6/8 14:22:25

本文整理自龙蜥SIG技术周会, 作者闻茂泉,阿里云计算平台事业部SRE运维专家,是龙蜥社区跟踪诊断SIG核心成员。本文带你了解 ssar 的基本功能和使用、初步学习用 ssar 解决单机 OS 问题的诊断。直播视频回放已上线至龙蜥社区官网:首页-支持-视频,欢迎观看。

本文整理自龙蜥SIG技术周会, 作者闻茂泉,阿里云计算平台事业部SRE运维专家,是龙蜥社区跟踪诊断SIG核心成员。本文带你了解 ssar 的基本功能和使用、初步学习用 ssar 解决单机 OS 问题的诊断。直播视频回放已上线至龙蜥社区官网:首页-支持-视频,欢迎观看。

说起性能分析就不得不提到《性能之巅》这本书,它是业界里程碑式的经典书籍。在书中第 4 章观测工具部分,Brendan 告诉我们观测工具主要包括:计数器(Counters)、跟踪(Tracing)、采样(Profiling)和监控(Monitoring)几大类。

依据数据获取方式和数据实时性两个维度,可以将性能观测工具做个分类:

  1. 左上角 A 区是直接读取计数器实时数据的一些系统命令,top、ps 这些命令我们都很常用,它们读取的是 /proc/ 这个目录的信息,这里面的数据是内核帮我们记账出来的。

  2. 左下角 B 区也是基于计数器的 ,但它是记录历史信息的工具,比如说最常用的就是sar工具,下文我们统称这类工具为系统性能监控工具。 在阿里内部也有 tsar 工具,国外还有开源软件 atop。系统性能监控工具一方面可以回溯历史数据,同时也提供实时模式数据。

  3. 右上角 C 区跟踪采样工具,内核的 tracepoint、kprobe 等就是跟踪类工具,perf 工具主要是采样类工具,下文我们统称这两类工具为跟踪采样工具。 目前这些工具都是只获取实时的数据。如果不结合其他工具,单纯使用它们来追查历史数据,它们是无法提供的。

  4. 右下角 D 区,我们认为可以通过 B 区和 C 区的工具协同使用达到目标。C 区工具只负责获取内核关键数据,B 区工具只负责数据采集和数据获取,二者之间使用标准数据接口。

左上角 A 区是直接读取计数器实时数据的一些系统命令,top、ps 这些命令我们都很常用,它们读取的是 /proc/ 这个目录的信息,这里面的数据是内核帮我们记账出来的。

左下角 B 区也是基于计数器的 ,但它是记录历史信息的工具,比如说最常用的就是sar工具,下文我们统称这类工具为系统性能监控工具。 在阿里内部也有 tsar 工具,国外还有开源软件 atop。系统性能监控工具一方面可以回溯历史数据,同时也提供实时模式数据。

右上角 C 区跟踪采样工具,内核的 tracepoint、kprobe 等就是跟踪类工具,perf 工具主要是采样类工具,下文我们统称这两类工具为跟踪采样工具。 目前这些工具都是只获取实时的数据。如果不结合其他工具,单纯使用它们来追查历史数据,它们是无法提供的。

右下角 D 区,我们认为可以通过 B 区和 C 区的工具协同使用达到目标。C 区工具只负责获取内核关键数据,B 区工具只负责数据采集和数据获取,二者之间使用标准数据接口。

我们在性能分析工程实践中重点聚焦在左下 B 区和右上 C 区蓝框 2 个象限的建设上。今天我们主要探讨的就是 B 区的系统性能监控工具建设情况。以后会再给大家介绍 C 区的工具建设情况。

在对系统性能监控和跟踪采样工具的具体理解上,我们认同如下 3 个理念:

1)内核计数器(Counters)信息获取代价低,无额外开销。相比较而言,跟踪采样工具或多或少都有一些运行开销,如 kprobe 的使用还可能会引起一些稳定性风险。因此,我们倾向于最大化挖掘计数器信息的价值。比如要获知机器直接内存回收的信息时,内核计数器已经提供了更低代价获取的直接内存回收和异步内存回收的指标,就完全没必要使用 ftrace 监控直接内存回收的情况了。另一方面,对于内核计数器不能涵盖的细颗粒度内核数据,还必须要依赖内核跟踪采样工具获取。比如当 IOPS 较高时,我们想了解具体的每一个 IO 读写的具体文件信息,内核计数器中完全没有相关信息。只有让跟踪采样工具专注于自己的核心任务,才更有条件打磨出更加稳定和可靠的精品工具。

2)现有的系统性能监控工具,除单机监控工具外,还有很多白屏化的监控平台。白屏化监控平台一般都是将数据采集到中心数据库,然后再集中展示。白平化监控平台采集更详细的计数器信息时,不可避免的都会遇到存储成本的问题,不宜将过多数据采集到白屏化监控平台。但同时对于一些高频使用的常规指标,如 CPU、内存和网络使用率情况,使用白屏化监控平台展示,确实可以大大提升可观测性。所以高频常规指标使用白屏化监控平台的同时,仍然需要一个数据指标更加丰富的单机系统性能监控工具配合使用。在一些关键时刻,还必须依赖这些低频数据来分析和定位问题。

3)传统的黑屏系统性能监控工具,多年来一直相对比较固化,历数 2010 年、2015 年、2020 年指标内容变化不是特别大。举个例子,新版本内核的计数器中,网络扩展指标多达 400 多个,仅 TCP 扩展指标就有 116 个,但是实际上常规的系统性能监控在TCP网络指标这一块,也就使用了不超过 15 个指标,大部分指标价值并没有被挖掘出来。这些网络的内核计数器指标,在很多网络相关问题发生时,都很有实用价值。

基于这些理念,我们认为研发一款数据指标更全、迭代周期更短、性能更加稳定的系统性能监控工具,以应对日益复杂的系统性能问题是很必要的。

今天我们要介绍的阿里自研 ssar 工具,就是这样一款系统性能监控类工具,并且已经在知名的操作系统社区龙蜥开源。它几乎涵盖了传统系统性能监控 sar 工具的所有功能,同时扩展了更多的整机级别的指标,新增了进程级指标和特色的 load 指标、load 高问题的诊断是这个工具一个独特的功能。

开源软件 atop 也是这样一个类似功能的系统性能监控工具。公开渠道了解到友商也在大规模部署 atop 工具,这说明在业界其他互联网公司也感受到了拥有这样一个功能定位的监控工具的重要性。

二、系统性能分析工具 ssar 简介

系统性能监控工具 ssar 开源地址(见文末),其中 Reference_zh-CN.md 是更详细的中文帮助手册,package 目录中有 rpm 和 deb 包提供,其他操作系统可以自行编译打包。

ssar工具分为采集器、内层的通用查询器、外层的增强查询器和经典查询器几部分。

(a) 按文件单位采集的整机数据、meminfo、stat、vmstat等;

(b) 包含 24 个指标的进程级数据;

(c) 独特的 load5s 指标和详细的 R 或 D 状态线程详情数据;

2)通用查询器 ssar 命令:c++ 语言实现,负责按文件名、某行、某列等通用规则对文件数据进行逻辑解析。

3)古典查询器tsar2:python 语言实现,对 ssar 命令进行封装,全面兼容 tsar 命令;

4)增强查询器ssar+:python 语言实现,对 ssar 命令进行封装,规划上是未来 ssar 工具的主要核心,适合于把较复杂的数据逻辑放在 python 语言实现层。

三、系统性能分析工具 ssar 支持快速开发迭代

传统 sar 工具只采集一些固定指标,使用 C 语言采集数据的同时进行指标解析。在这种模式下,不是极难扩展新指标,就是扩展新指标开发迭代周期特别长。

ssar工具完全颠覆了传统 sar工具的架构设计,在产品设计和程序架构上做了很多变化,可以让我们快速、低开发成本的增加新的计数器指标。

1)如果我们需要关注一个新的指标,而这个指标又没有被采集。对于传统的系统性能监控工具sar来说,修改发布迭代周期是非常长的,发布下来可能要数周到数月,中间要经过逐步的灰度发布过程。在学习内核知识或者解决生产问题的时候,新问题等不起这么久。但 ssar 工具以文件为采集单位,不需要修改代码,直接修改配置文件,重启 srerar 采集进程就可以采集到一个新的数据源文件。新增采集文件可在 sys.conf 文件中的 file 区域增加一行配置项,其中 sre_path 为数据源位置,cfile 为数据文件存储名,turn 为开启采集。

2)ssar 工具把一些通用处理逻辑都抽象到通用查询器 ssar 命令里,配置了文件采集后,只需一条 ssar 命令即可查询显示数据,完美实现分钟级周期的开发迭代。其中cfile指定存储文件名,line 指定第 3 行,column 指定第 5 到 15 行,metric 指定显示原值,alias指定指标名称。

3)ssar 会把更加复杂的数据逻辑放到外层 python 语言的查询器中实现。这个时候很容易通过在 python 语言中适应数据格式的变化。内核中有些指标的格式会随着内核版本的变化而变化,比如 TCP 的 TimeWaitOverflow 指标在 3.10、4.9 和 4.19 版中所处的列数就不同。此时通过 python 语言可以轻松获取 column 值,再传递给ssar通用查询器。即使面对未来的内核版本中的各种未知格式变化,我们也可以在python语言查询器中轻松应对自如。可随时调试和升级python查询器,如 cp tsar2 /tmp/test.py。不论是单机环境 debug,还是脚本批量下发,均可轻量级操作。

四、ssar 工具整机指标使用介绍

ssar 命令显示整机指标信息,其中 /s 结尾的是增量指标,表示当前时刻和上一个时刻的区间内平均每秒的增量数值。无 /s 结尾的是刻度指标,只表示当前时刻的瞬时值。

使用 help 选项可获取整机指标使用帮助信息。

各个选项参数的含义如上所示,选项参数有如下一些特点:

1)-f 选项指定显示数据的结束时间点,-b 选项指定显示数据的开始时间点,-r 选项指定显示数据的时间区间长度,三个选项只需指定 2 个即可。-f 选项默认值为当前时刻,-r 选项默认值为 300 分钟。

2)各个选项参数值大多可以支持输入小数,单位分别支持天、时、分、秒,如1.2d、5.5h、60m 和 1s。如无单位后缀,则默认单位后缀是m分钟,如 60 同 60m。

3)-H选项用于隐藏header信息,使输出结果更便于各种 shell 命令的解析,—api输出json格式数据,使输出结果更便于python脚本等高级语言解析。

4)小o选项用于指定输出数据列的字段信息,多列指标用逗号隔开。对于高频常用的多个字段输出,还提供字段组合选项,如—cpu、—mem。大O选项用于在既有字段组合输出基础上,追加输出指标信息。因此,大O选项可与—cpu —mem等同时使用,而小o选项和大O选项及其他字段组合互斥。

ssar 对整机指标的采集是以文件为单位,通过 toml 格式的配置文件 /etc/ssar/sys.conf 配置及开关文件的采集:

  1. src_path=’/proc/stat’ 表示采集数据源文件位置为/proc/stat;

  2. cfile=’stat’表示保存的数据文件后缀名为 stat;

  3. turn 选项控制当前采集是否开启,设置为 true 开启采集;

  4. gzip 选项控制采集文件是否采用 gzip 压缩格式存储,设置为 true 开启压缩;

src_path=’/proc/stat’ 表示采集数据源文件位置为/proc/stat;

cfile=’stat’表示保存的数据文件后缀名为 stat;

turn 选项控制当前采集是否开启,设置为 true 开启采集;

gzip 选项控制采集文件是否采用 gzip 压缩格式存储,设置为 true 开启压缩;

ssar 支持两种数据提取方式,预定义方式和自定义方式。

ssar 预定义指标提取数据方式适合于使用 ssar 命令直接消费数据的场景。预定义指标可在 sys.conf 文件中灵活的配置,下面 2 个例子说明了如何配置预定义指标:

1)配置项 user 表示指标名为 user,数据文件后缀为 stat,取开头为 cpu 的行的第 2 列数据的差值,输出字段宽度 10 个字节。

2)配置项insegs表示指标名为 insegs,数据文件后缀为 snmp,取第 8 行的第 11 列数据的差值,输出字段宽度 10 个字节。

配置了预定义指标后,可以进一步配置 view 视图,聚合预定义指标到一个视图下。这就是 ssar —cpu 的命令里 —cpu 的来源。

ssar 也支持自定义指标方式提取数据指标,自定义指标提取数据方式适合于使用python语言封装的查询器使用。如下是一些自定义指标方式的使用示例:

1)取 meminfo 中 MemFree 值,字段名命名为 free

2)取 snmp 中第 8 行第 13 列值的差值

3)显示 cpu0 到 cpu15 的 idle 的实时模式数据

自定义方式使用方法说明:

1)cfile 用来指定数据文件中的后缀名,需要同 sys.conf 配置文件中的 [file] 部分的 cfile 的值保持一致;

2)line 直接指定指标所在的行数,line 与 line_begin 不能同时指定;

3)line_begin 指定指标所在行的行首匹配关键字符串,需要保证在整个文件中独一无二;

4)column 指定指标在特定行所处的列数,列以空格为分隔符;

5)metric 用于指定按以上规则获取到值后是原值输出,还是取相邻时间的差值输出,值为c表示原值输出,为d表示取差值输出;

6)alias 用于指定当前指标输出的标题名或 json 格式中的 key 值.

tsar工具是阿里集团的一款经典系统性能监控工具。基于ssar命令的整机自定义指标方式,使用python语言封装的 tsar2 命令几乎完全兼容tsar命令。

各个模块的指标集合:

tsar2 命令不但功能十分强大,而且开发成本极低:

1)tsar2开发周期只有不到2周时间;

2)tsar2命令兼容 tsar 功能部分的python代码实现只有600多行;

3)tsar2在兼容原有基础功能的基础上还新增了4组网络诊断指标,不考虑前期预研的时间,4组指标的代码实现时间只用了2个小时。 4组网络诊断指标:tsar2 —tcpofo、tsar2 —retran、tsar2 —tcpdrop、tsar2 —tcperr。

基于 ssar 良好的扩展性和低扩展开发门槛,针对软中断分布不均这种业界常见问题,使用 python 语言实现了 3 组功能强大的诊断功能:

1)首先,tsar2 的 cputop 子命令可以将各个核软中断 CPU 使用率(sirq)最高的核排序出来。N1 表示排序最高的 CPU 信息,N2 表示排序次高的 CPU 信息。比如 11:35 这个时刻下 N1 的三个值表示 54 号核 CPU 的 sirq 软中断使用率为第 54 号核 CPU 资源的 21.84%。从图中显示的部分数据看 54 号核频繁出现软中断 sirq 使用较高的情况。

2)如果我们不确定找到 54 号核 CPU 是否准确,还可以通过 tsar2 命令的 cpu 视图中指定观察 cpu54 核的 sirq 的变化。

3)一旦确定软中断 CPU 使用率异常的 CPU 核号,可以通过 tsar2 的 irqtop 子命令查找引起问题的具体软中断信息。在 irqtop 子命令中指定 54 号 CPU,并排序出软中断次数最多的 irq 号是 155,对应的 irq 名称是 virtio3-input.1,并且看到 11:50:48 秒的软中断次数高达 1.9K。

irqtop子命令默认只支持实时模式。如需开启历史模式可去掉命令中-l选项,同时还需要修改配置文件 sys.conf,开启 interrupts 数据文件的采集。

如此强大的cputop和irqtop子命令同样也是在python语言中,通过400行代码轻松实现。这里也同样表明了在ssar架构下,开发新的系统性能监控功能的灵活优势。

五、ssar工具进程指标使用介绍

ssar 的 procs 子命令可以显示多进程信息,效果相当于可以显示任意历史时刻的 linux ps 命令的输出。

ssar 的 procs 子命令选项可参考ssar procs -h命令,选项参数有如下一些特点:

1)-f、-b和-r选项同样只需指定2个选项即可,-f选项默认值为当前时刻,-r选项默认值为5分钟。多进程子命令情况下,只会在开始和结束时刻分别取 2 个时刻数据进行对比。瞬时的刻度类指标只显示结束时刻值。

2)强大的字段排序功能支持多字段依次排序,先按第一个字段排序,相同值按第二个字段排序。排序字段前减号表示降序排序,排序字段前加号表示升序排序。每个字段都有系统内建排序规则,通常数据类指标按降序排序,如rss,属性指标按升序排序,如 pid。

3)所有进程排序后,-l选项可限制输出进程的行数。

4)两个特色的指标组合 —job 和 —sched,用于进程组和调度问题排查。

ssar 的 proc 子命令显示单进程纵向历史时刻信息。

1)-p选项为必选参数,用于指定需要显示的进程的 pid 信息。

2) -f选项指定结束时间点,-b选项指定开始时间点,-r选项指定时间跨度,三个选项只需指定2个即可。-f默认值为当前时刻,-r默认值为 300 分钟。

3) -H选项隐藏header信息更便于shell脚本解析,—api选项输出json格式数据更便于python脚本等高级语言解析。

4)小 o选项用于指定输出数据列的字段,多列指标用逗号隔开。对于高频常用的多字段同时输出,还提供字段组合选项,如 —cpu、—mem。大 O选项用于在既有字段组合输出基础上,追加输出字段指标。因此,大 O 选项可与 —cpu —mem 等同时使用,而小 o 选项和大 O 选项及其他字段组合互斥。

5)左尖括号 <表示7点02分sleep.sh进程还没启动,右尖括号 >表示7点22分进程已结束。此功能可以协助判断一个特定进程的开始和结束时间范围。

下面通过一个简单的例子,来说明下如何通过 ssar 进程级指标诊断线程数打满问题。Linux 内核有个参数 kernel.pid_max = 131072,这个参数会设置机器的总线程数上限。

1)一台机器在非工作时段发生了异常进程创建大量线程将线程数打爆的情况。凌晨3点整,整机线程数飙升到了131.1K,且持续时间极短,3点1分已经恢复。

2)传统条件下,这种场景的发生根本来不及等待人工登录上去抓取现场信息。如今有了ssar工具对历史信息的自动采集,我们可以等到工作时间,使用ssar的多进程子命令轻松获取进程级原因。NLWP(Number of light weight process)表示一个进程的线程数,使用-k选项数按 nlwp 字段排序可以发现是 pid 为 1045 的 Java 进程引起线程数打满。

3)不放心的同学,还可以使用 awk 将这个问题时刻2021-03-30T03:00:00的所有线程数相加,和为 131024,印证了确实等同于当时机器总线程数plit值131.1K。

六、ssar工具load指标使用介绍

传统的系统性能监控工具中的 load1 指标尽管比 load5 和 load15 指标更精准,仍然不能满足排查问题时对时间范围的精准度的要求。ssar 在国内外全行业独创了 load5s 指标,该指标可以让我们将 load 的准确性提升到 5 秒级的精度。load5s 指标的准确性绝不仅体现在采集频率上,简单说 load5s 指标就是 R+D 的线程数,也是内核数据结构中的全局变量 active 值。为了准确理解 linux load 和 load5s 指标,执行如下实验操作:

找一台实验机器,先编译一个可以模拟 D 状态线程的程序 uninterruptible。然后用 stress 命令启动 100 个进程执行 30 秒后退出。大约再等 20 秒左右再批量循环启动 1000 个 uninterruptible 进程。执行结束后,效果如下图所示。

1)绿色时间区域,5 分 52 秒时 load5s 和 load1 都处于一个低水位,毫无疑问说明当时机器负载压力很低。

2)第一个红色时间区域,伴随着stress命令开始执行,load5s 和 load1 都同时升高,6分07秒时刻,load5s 值已经达到78,load1 开始升高到 6.27,但是这个 load1 的值远远不能体现出当前机器上并发运行的线程的状况。随着时间的推移,6分32秒这个时刻,load1的值缓慢升到了39.22。

3)第一个蓝色时间区域,伴随着stress命令进程退出,load5s已经迅速跌回到一个低水位,6分37秒这个时刻的 load5s 值也同时迅速降低到了很低的值0,机器的R+D状态线程已经几乎没有了,系统完全没有任何压力。但此时load1还保持在36.08的高值。明显可以看出传统的 load1 指标在系统负载压力消失后,还一定的滞后性。

在后面2个红色区域和2个蓝色区域,也可以观察到同样的现象。共同的规律是红色区域开始时刻,代表R+D状态线程数的load5s值明显很高,但相同时刻的load1却还较低。蓝色区域开始时刻,代表R+D状态线程数的load5s值已经为0,但相同时刻load1却还较高。

上面这个实验充分说明 load5s 才是更能准确反映系统负载压力的指标,而单纯用 load1 值判断机器的负载是不准确的。所以我们需要用 load5s 指标替代 load1 指标来精准判断机器负载发生的时间范围。这里强调一下,load5s指标完全在用户态通过工程化的方法巧妙获取,没有对内核模块的任何依赖。

除 load5s 指标外,上面的解决方案中,还提供了一组指标用于全面的评估系统负载情况。其中 load5s 是 R+D 状态的线程数之和,runq是当时的R状态线程数,threads是所有状态线程数总和,因此 threads 值是 load5s 值的天花板,threads 最大值受内核参数设置限制。

ssar 工具还会根据 load5s 和 CPU 核数之比的大小,来触发对 load 详情的采集,前边的 actr 是采集到的并发R状态线程数,actd 是采集到的并发 D 状态线程数,act 是 actr 和 actd 数之和。当我们需要了解load构成的详细因素时,可以借助load2p子命令进一步显示actr和actd的详情信息。

未触发 load 详情采集的采集时刻,act 值不存在,显示为短横线-。可以用-z选项过滤出 load5s 子命令输出结果中act存在值的时刻,即 ssar load5s -z。

然后再用 load2p 子命令显示更加详细的load详情信息,选项-c 指定需要显示的load详情的时刻值。load2p子命令一共可输出6个视图的信息,loadrd、stack、loadr、loadd、psr和stackinfo。

1)loadrd视图显示指定时刻所有R和D状态的线程信息,每个线程包括线程状态、线程ID、进程ID、CPU核号、线程调度优先级和命令名称。ssar 只采集 R 和 D 状态的线程信息。

2)stack视图显示抽样后的D状态调用栈,最多抽样100个。每个D状态线程调用栈包含线程ID、进程ID、进程名称、栈顶函数位置、栈顶函数名和完整的调用栈。

3)基于以上2个视图的信息,load2p子命令又聚合了4个视图信息,并且默认只显示这4个聚合视图 loadr、loadd、psr 和stackinfo。Loadr 视图按 pid 聚合 R 状态线程信息,适合诊断 loadR 高时的进程级因素。

4)loadd视图按pid聚合D状态线程信息,适合诊断loadD高时的进程级因素。

5)psr视图按CPU核号psr聚合,适合诊断绑核不均的情况。

6)stackinfo视图按调用栈聚合,对loadD高时,诊断D状态线程发生的原因特别有用。

七、ssar工具配置文件说明

ssar工具的主配置文件是/etc/ssar/ssar.conf,其中分为[main]、[load]和[proc]三部分。

  1. [main] 部分配置选项主要用于设置 ssar 工具整体的一些选项内容,[load] 和[proc] 分别对应 load 信息采集和进程信息采集部分的选项,整机信息的配置选项在前文介绍的 /etc/ssar/sys.conf 文件中独立设置。

  2. duration_threshold 选项设置最多保留 168 小时。inode_use_threshold、 disk_use_threshold 和 disk_available_threshold 这3个选项任意一个条件不满足时,则停止数据采集,并且开始从时间最老的数据到最新的逐步删除数据,以试图使刚才不成立的条件成立,一直删除到只剩最新的一个小时数据目录为止。ssar工具的这种磁盘空间处理逻辑可以说不占用额外的磁盘空间。

  3. load5s_flag、 proc_flag 和 sys_flag 分别控制采集器三部分数据的采集,嵌入式系统中可以同时关闭 load5s_flag 和 proc_flag 后再配置 sys.conf,从而做到只采集自己关注的数据源。

  4. scatter_second 选项用于在大规模集群中,使各个主机的采集时间分散化。

  5. load5s_threshold 设置 load 详情采集触发阈值,不同角色的服务器此阈值需要根据各自特点个性化设置。

[main] 部分配置选项主要用于设置 ssar 工具整体的一些选项内容,[load] 和[proc] 分别对应 load 信息采集和进程信息采集部分的选项,整机信息的配置选项在前文介绍的 /etc/ssar/sys.conf 文件中独立设置。

duration_threshold 选项设置最多保留 168 小时。inode_use_threshold、 disk_use_threshold 和 disk_available_threshold 这3个选项任意一个条件不满足时,则停止数据采集,并且开始从时间最老的数据到最新的逐步删除数据,以试图使刚才不成立的条件成立,一直删除到只剩最新的一个小时数据目录为止。ssar工具的这种磁盘空间处理逻辑可以说不占用额外的磁盘空间。

load5s_flag、 proc_flag 和 sys_flag 分别控制采集器三部分数据的采集,嵌入式系统中可以同时关闭 load5s_flag 和 proc_flag 后再配置 sys.conf,从而做到只采集自己关注的数据源。

scatter_second 选项用于在大规模集群中,使各个主机的采集时间分散化。

load5s_threshold 设置 load 详情采集触发阈值,不同角色的服务器此阈值需要根据各自特点个性化设置。

Linux top命令中有2处%Cpu,一处是在头部,另外是在每个进程信息中。关于两者之间的关系,我们借助ssar工具的使用简单介绍一下。

为了准确理解linux CPU Usage指标,在一台4核机器上执行如下实验。A终端执行命令 stress -t 120 -c 3,执行时间为23时23分20秒,120秒后会结束。B终端同时执行top命令,如图所示。

理解 CPU Usage 指标:

1)在A终端上,等待stress执行结束2分钟后,执行tsar2命令。23时25分的user值为75.60,它的含义表示23时24分到23时25分这60秒内的平均user CPU使用为75.60%。这里看出tsar2的user值等同于top命令的us值75.2,区别就是tsar2的是60秒平均值,top的是运行时刻的之前3秒的平均值,但因为三个stress命令运行平稳,top的3秒平均值也基本代表60秒的均值。

2)在A终端上继续执行ssar命令,23时25分的user/s值为301.35。ssar的cpu值是取自/proc/stat,单位是内核tick数。x86_64系统每秒100个tick,即100HZ。4颗CPU总数就是每秒400个tick, 23:25时间的user值是301.35,它的含义表示23时24分到23时25分这60秒内的平均每秒user CPU使用量为301.35 tick数。

3)我们可以查看tsar2的python源码,能够了解到tsar2的user值是ssar的user值占ssar所有CPU使用量之和的百分比。

4)在A终端上继续执行ssar procs子命令。23时25分的三个stress进程的pucpu值都为100.0。这里的每一个100.0的含义是这个进程在23时24分到23时25分这60秒内的进程的平均用户空间CPU使用率为100.0。计算过程是用进程的cpu时间片除以自然时长,再乘以100,即百分比的100。这个算法和top命令下半部分的进程级别的%CPU一致。

5)这里我们可以看到这样的数据关系301.25 ≈ 100 + 100 + 100 + 3.3,只不过整机user CPU值301.35是自然时间乘以了100HZ,进程级CPU是乘以了百分比的100。使用ssar —cpu和ssar procs —cpu两个命令,已经可以将整机总体的CPU使用情况和进程级别CPU使用情况的关联起来。

6)最后top命令中的us值和进程信息中的%CPU的关系也就自然建立起来了。一点不同就是top中是将整体CPU使用情况进一步计算了一次百分占比。

九、ssar工具内存回收案例

在 load 高的各种场景中,有一种R状态线程数并发多的load高是由于sys CPU使用率偏高引起的。ssar 全面的指标体系,从多个角度将这种场景发生过程进行了透彻的呈现。

为了准确的说明问题,有必要回顾下内核内存回收的相关概念。如图所示,当整机free内存低于黄线low阈值时,内核的异步内存回收线程kswapd开始被唤醒,kswapd会在其他进程申请内存的同时回收内存。当整机free内存触达红线min阈值时,触发整机直接内存回收,所有来自用户空间的内存申请将被阻塞住,线程状态同时转换为D状态。此时只有来自内核空间的内存申请可以继续使用min值以下的free内存。后续当整机free内存逐步恢复到绿线high阈值以上后,kswapd线程停止内存回收工作。

下面以ssar的数据指标为依据,一步一步的展示了当整机内存紧张后是如何引起sys CPU高,并进而引发load高的完整过程:

1)用户空间java进程在20点43分到20点45分2分钟内大量申请24GB内存;

2)整机内存used在20点43分到20点45分2分钟内迅速增长了26GB,同时整机free内存迅速减少了14GB;

3)free内存在20点45分时只有3GB,低于low阈值,pgscan_kswapd/s值非0表明触发kswapd异步内存回收。

4)kswapd异步内存回收跟不上进程内存申请的速度,当free内存低至min阈值时,pgscan_direct/s值非0表明触发直接内存回收,用户空间内存申请进程开始D住。栈顶函数sleep_one_page和congestion_wait等都表明发生了直接内存回收。

5)20点44分到20点45分出现大量网络吞吐,每秒进出流量分别达到1.5G和1.0G。网络流量吞吐会伴有内核空间内存申请,继续消耗min阈值以下(橙色部分)free内存。

6)内核网络模块会申请order3阶内存,20点45分时刻buddyinfo中order3以上高阶内存消耗殆尽,剩余的3GB free内存处于碎片化状态。内核空间申请的内存是连续内存,虽然order2和order1有库存,但申请order3时是无法被分配的,内核只能处于忙等状态。

7)触发内核态忙等,同时会引发20点44分到20点45分的sys CPU升高,sys CPU平均每秒占总CPU资源的89.61%,挤占用户空间既有进程CPU资源,同期用户态CPU使用从原来的72.59%降低到7.73%。

8)触发直接内存回收时,会引发大量D状态线程,后续order3库存枯竭引发sys CPU高后,会继续引发大量R状态线程。load5s子命令看到的现象就是先出现load5s指标升高,再出现load5s和runq同时升高。

内存回收是生产环境较常见的一个情况。除以上场景外,生产中还会发生其他场景的内存回收,数据指标的表现上也有差异。还需要借助其他性能分析工具,结合内核代码进一步分析。

系统性能监控工具 ssar 开源地址:

https://gitee.com/anolis/tracing-ssar.git

敲重点啦

本次直播视频回放已上线至龙蜥社区官网(首页-支持-视频),直播 PPT 获取方式:关注龙蜥社区公众号,后台回复【龙蜥课件】或【龙蜥视频回放】即可。

龙蜥社区官网截图

—— 完 ——

关于龙蜥社区

龙蜥社区(OpenAnolis)是由 企事业单位、高等院校、科研单位、非营利性组织、个人等在自愿、平等、开源、协作的基础上组成的非盈利性开源社区。龙蜥社区成立于 2020 年 9 月,旨在构建一个开源、中立、开放的Linux 上游发行版社区及创新平台。

龙蜥社区成立的短期目标是开发龙蜥操作系统(Anolis OS)作为 CentOS 停服后的应对方案,构建一个兼容国际 Linux 主流厂商的社区发行版。中长期目标是探索打造一个面向未来的操作系统,建立统一的开源操作系统生态,孵化创新开源项目,繁荣开源生态。

目前, 龙蜥OS 8.4已发布,支持 X86_64 、Arm64、LoongArch 架构,完善适配飞腾、海光、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。

欢迎下载:

https://openanolis.cn/download

加入我们,一起打造面向未来的开源操作系统!

https://openanolis.cn


http://www.hkcw.cn/article/vmZbdeJuou.shtml

相关文章

姿态和女友要结婚了?姿态朋友透露:还没定,但到时会请一桌粉丝

前言: 在国内电竞圈中,流行着这样一句梗:电子竞技不需要爱情。那么为什么电子竞技会“不需要”爱情呢?大概是因为玩家玩游戏和陪对象是冲突的,毕竟陪女朋友逛街看电影什么的,就打不了游戏了。不过玩梗是玩梗,国内电竞圈中还是有不少令人羡慕的情侣的,比如Doinb和糖小幽、…

给大家介绍一下:什么是BSCI验厂认证!!!

BSCI验厂认证是一种经过行业认可的验厂制度,旨在评估和改善国际生产商的社会责任表现。它是商业社会责任(CSR)最广泛的标准之一,由欧洲买方协会(FBDi)创建并管理。通过进行BSCI认证,买方公司可以确保其供应链中的工厂以维护正当权益的方式生产产品。本文将解释BSCI验厂认…

原创中国历史上最大的10个贪官,和珅都只能排第十位!你知道几个?

在中国悠久的历史长河中,贪官污吏的存在如同一道阴暗的阴影,不仅侵蚀了国家的根基,也深深伤害了民众的心,这十位贪官,从春秋时期的羊舌鲋到清朝的和珅,跨越了千年的时光,却共同展现了人性中贪婪与堕落的一面。羊舌鲋:贪婪的先驱 作为最早有明确记载的贪官,羊舌鲋的贪婪…

统编版语文四年级下册期末复习知识点汇总丨可打印

梅老师给大家整理了统(部)编语文四年级下册期末复习知识点,有需要的家长,可以打印给孩子学习。(建议老师分享到班级群,让家长打印出来,给孩子学习!) 第一单元展开全文第二单元第三单元第四单元第五单元第六单元第七单元第八单元▍资料来源:网络 你若喜欢,点个在看哦…

原创盘点影后周冬雨演过的电影:每一部都是经典 你看过几部?

想必大家都看过周冬雨演的电影吧,她还获得了一系列奖项,还被称为最清纯的“谋女郎”,可以来说她这几年的事业真是蒸蒸日上啊!年仅28岁就成功包揽华语电影三大奖,(金马奖、金像奖、金鸡奖)作为目前达成这一成就最年轻的一位女演员,周冬雨的高度已然让许多人望尘莫及。而…

隐忍了5年,华为鸿蒙终于甩掉了“套壳安卓”的帽子

自从2019年鸿蒙系统问世之后,对于它的争议就一直源源不断,有说它是国产系统的骄傲,也有说它只是一个“安卓换皮”的系统,但不管怎么说,鸿蒙系统其实一直都沿着自己的道路稳步推进着。 就在近日,在华为开发者大会HDC2024上,华为常务董事余承东宣布,HarmonyOS NEXT,也就…

软件测试/测试开发|Linux三剑客之——awk命令详解

简介 如果你是一位新手 Linux 用户,可能已经听说过 Awk 这个神奇的命令。Awk 是一种强大的文本处理工具,它可以在命令行中用于处理和分析文本数据。无论是数据提取、格式化、计算还是报告生成,Awk 都是个不可多得的工具。 什么是awk? Awk 是一种面向文本处理的编程语言,最…

【战术】低种族宝可梦的骄傲——脱壳忍者

大家好,这里波蕉曼s channel。本系列致力于介绍那些低种族(<450)却有着重要战略地位的宝可梦。 本期的主角是出生于第三世代的脱壳忍者。 (据说盯着脱壳忍者背后的🕳看,灵魂会被吸走哦!) 【能力分析】 脱壳忍者,俗称“鬼蝉”。按以往的惯例是先简单分析一下种族,…

清代 徐扬的宏伟画卷《姑苏繁华图》长卷,太美了

清代 徐扬的宏伟画卷《姑苏繁华图》长卷,太美了 清代 徐扬的宏伟画卷《姑苏繁华图》长卷,太美了!打开来自两百多年前的《姑苏繁华图》长卷,透过旧时墨色,走进这繁华之城,静穆间,仿佛听见了古运河中阵阵橹声,山塘街上悠悠丝竹,以及街市上的往来喧嚣……清代有位画家徐扬…

起底18888888888被1.2亿天价拍卖背后的靓号市场

手机现在大家几乎是人手一部,手机号码也是人人必备的。可是就这小小的手机号码,简单的十一个排列组合,在很多人手上就成了身份的象征,就像前阵子被曝光的一个手机号,价值1.2个亿,是全国最贵的一个手机号码,你见过吗? 前阵子有一个北京移动号码为18888888888,拍卖成交价…

2024秋统编版语文二年级上册电子课本(高清完整版)

人教版二年级上册语文电子课本可以方便大家随时随地预习或复习课本知识,为此,我们找到了人教版二年级上册语文电子书教材的全部内容,希望能够提高大家的学习效率。 如需全套小学电子课本PDF版,请关注公众号“桃李百科”回复:“电子课本” 人教版二年级上册语文电子课本在线…

【地理视野】关于对流层,你应该掌握的地理知识,有点超纲!

平时我们总说对流层对流层 但对流层究竟是个什么层你真的知道吗? 今天就和小编一起来了解一下~ 对流层在大气的最下层,从地球表面开始向空中伸展,直至对流层顶,即平流层的起点为止。它的厚度不一,在8至17千米之间,会随季节和纬度的变化而变化。对流层有以下几个特点 温度…

五岳归来不看山,黄山归来不看岳的意思

“五岳归来不看山,黄山归来不看岳。” 意思就是去过五岳之后,其他的山不过如此,无需再看;而看过黄山之后,发现五岳也不过如此了。表明黄山景观之胜。 五岳: 指东岳泰山、西岳华山、南岳衡山、北岳恒山和中岳嵩山,是我国历史上的五大名山。黄山:在安徽省南部。风景秀丽。…

原创三看《康熙王朝》:才懂葛尔丹死都不知道,是蓝齐儿的善良害了他

这个故事,它发生在清朝康熙年间,涉及一位皇帝、一个蒙古大汗以及一位美丽公主之间的纠葛。这是一个关于爱情、权力与抉择的故事,也是一段因善良而导致的悲剧。一、人物背景:身世的牵绊 在清朝康熙年间,紫禁城中有一位名叫蓝齐儿的公主。她是康熙皇帝的爱女,自小便展现出聪…

开国上将 陶峙岳

陶峙岳 (1892.09.18─1988.12.26),中国人民解放军开国上将,湖南省宁乡县仙凤乡人。在军旅生涯中,历任湖南省督军公署参谋处上尉参谋,谭延门岂部“护字营”营参谋长、营长,湘军营长、团长,国民革命军团长、副师长、师长、军长、副总司令、总司令等职。先后参加了护国护法…

高度期待!《Fate/EXTRA 重制版》2025年发售

《Fate/EXTRA 重制版》预计于2025年正式推出,将同步登陆PS5、PS4、Steam以及NS平台。今日,该游戏的全新宣传片已经公开。 在新宣传片中,我们能看到经过重新设计的战斗系统和地下城场景。此次发布的版本是2010年游戏《Fate/EXTRA》的全面升级版,相信会给玩家们带来全新的体验…

这种生物能在外太空存活,严寒酷暑都不怕,实在太可怕了

水熊虫又叫水熊,在地球上有着广阔的分布。水熊虫是对缓步动物门生物的俗称,有人给他们起了个外号叫“小美”,迄今为止在地球上共有900多种,而且大都在地球上有着广泛的分布。水熊的体积非常小,最小的水熊体型只有50毫米,最大的水熊也只有1.4毫米,人们只有在显微镜的帮助…

高中生看过来!771个本科专业目录大全(附就业去向)

天为大家整理了12大学科门类的771个专业汇总及就业去向,为家长和孩子们专业选择提供参考。 教育部发布的《普通高等学校本科专业目录》,将普通高等教育分为哲学、经济学、法学、教育学、文学、历史学、理学、工学、农学、医学、管理学、艺术学12个学科门类。 根据专业的设置时…

原创战火铭记:一江山岛的历史回响

文/杨晓光 在东海之滨的台州列岛中,有一座小岛,名为一江山岛。尽管它的面积仅有1.7平方公里,但却因1955年那场陆海空协同登陆作战而声名远扬。一江山岛由南北两岛构成,由于岛屿的形态狭长,中间隔着一条宽约150米至200米的海峡,宛若一条天然的江流从两岛之间穿过,故得此名…

成本1500万,首映夺冠,我断言:包贝尔《制暴》是警匪片天花板

6月6号10点《制暴》网络首映。 这片由《东北警察故事》《目中无人》两大金牌系列的制作团队打造,谢苗还客串了一把李红旗,算是一个电影宇宙的作品,但电影又请来了包贝尔这位烂片之王主演。 让不少影迷担心质量问题,没想到我看完整部电影,不由感慨包贝尔找对路线了。 我甚至…