网络知识 娱乐 “linux性能”工具集助力分析优化Linux

“linux性能”工具集助力分析优化Linux

这段时间的工作全都扔在了Linux性能分析优化上。

看“一点”的优化,测试程序能轻松完成数据统计,并且自定义程度高;但“全局”的优化,或是在“侦查系统的性能问题”时,却很难设计一种测试程序,往往需要不同的性能分析工具帮忙。

这着实有些发狂!!!

但还是很庆幸,Brendan Gregg为Linux做了那么多分析工具,使得对于整体分析优化Linux系统有了那么多称手的“兵器”,这里再次感谢Brendan Gregg和torvalds。

https://www.brendangregg.com/linuxperf.html

Brendan Gregg是Linux系统性能优化的行家,你可以通过他的主页更快的上手Linux、eBPF等等新知识。

每张工具集图谱都有适应的场景,性能监控工具帮助实时测量当前系统状态,静态工具分析当前工作信息,性能基准工具更多用于测试系统能力,调参工具改变系统的一些状态。

性能监控工具集

在这里插入图片描述

静态工具

在这里插入图片描述

性能基准工具

在这里插入图片描述

调参工具

在这里插入图片描述

除了这些外,Brendan Gregg作为eBPF的推动者,还将利用BCC静态追踪和实时动态追踪方面的可用工具图谱也梳理出来,真的是壮哉壮哉。学习成本直线下降,舒服舒服。
在这里插入图片描述


Linux性能优化

图取自@HJX-ABC,文末放上链接。

Linux工具集太多,现阶段不可能全部梳理,但是后面如果用到,会继续加至尾后!这也算给自己布置了个任务!

CPU篇

CPU的性能在整个系统上算是最受关注的,它决定系统的处理效率,完成任务的速率。

拿CPU打头,合适不过。

CPU指标剖析

说工具前,必须得先弄明白指标是什么?

  • %user ,用户态 CPU 时间。它包含guest 时间,但不包含nice时间。
  • %nice ,低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。nice 取值范围是 -20 到 19,数值越大,优先级越低。
  • system 缩写%sys,内核态 CPU 时间。
  • %idle,空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
  • %iowait,等待 I/O 的 CPU 时间。
  • %irq,处理硬中断的 CPU 时间。
  • %softirq,处理软中断的 CPU 时间。
  • %steal,系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
  • %guest,通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
  • %guest_nice,以低优先级运行虚拟机的时间。

这里强调一下,获取真实CPU利用率的性能统计。

在这里插入图片描述

工具梳理

top

top是最常用的资源监视工具。top显示了系统总体的CPU和内存使用情况,以及各个进程的资源使用。

直接 top
在这里插入图片描述

关键指标%CPU和%MEM

htop

htop和top大致相同,都监控系统资源开销。但htop在top的基础上,进一步可视化了,甚至可以说htop就是一个监视器。

一般系统不自带
apt/apt-get/yum install -y htop
htop在这里插入图片描述

ps

ps实际上显示的是当前生存进程的快照,只能看到每个进程的资源使用情况。

ps -ef 进程信息
在这里插入图片描述

ps -eLf 线程信息
在这里插入图片描述

当想捕获特定进程/线程,通过“管道”可以grep到只关注的信息。

name是你想要的进程或线程名
ps -eLf|grep name

mpstat

mpstat是一个多核CPU性能分析工具,现在我大部分时间都在用,用于实时查看每个CPU的性能指标,以及总CPU的平均指标。

因为mpstat和pidstat都被包含在sysstat工具集里
apt/apt-get/yum -y install sysstat
mpstat -u -P ALL 1 10
-u 是显示CPU全部指标信息,- P ALL是 显示哪个/哪些CPU, - I SUM 是显示所有CPU的“中断数/秒”,1 10 是一秒一次,显示10次的信息。
在这里插入图片描述

pidstat

pidstat,望文生义,是一个关注进程的性能分析工具,我经常拿来查看进程的CPU、内存、I/O等指标。进程上下文切换也能被pidstat显示。

pidstat -u 5 1
-u 是显示进程的CPU利用率,5 1 每5秒1次,显示1次的信息。
-w 显示生存进程上下文切换的情况。 在这里插入图片描述

perf

perf是一个动态追踪性能分析工具,以“事件”采样为基础,分析系统里的各种事件和内核的性能,也常被用于定位分析“指定应用程序或命令的性能问题”。

apt/apt-get/yum -y install linux-tools-common linux-tools-generic linux-tools-`uname -r`
perf top -e / -p / -g
-e 指明要分析的性能事件 / -p指明要分析的进程及其创建出的线程

https://www.brendangregg.com/perf.html

碰到 CPU 使用率升高的问题,你可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数。

内存篇

内存是系统里重要的一个Part,它不仅仅和CPU交互,还利用IO桥和磁盘、网卡等等外设设备数据交换。

内存的利用率可以代表IO密集,所以系统的内存开销绝对是不能忽视的重要指标。

工具梳理

free

free是我最喜欢用的工具,free突出简单、直观,用来测量linux系统的实时内存开销。

free -s 1 -c 10
-s 表示时间间隔,-c表示计数
在这里插入图片描述

free暴露的信息让人一目了然,Mem:虚拟内存和Swap:文件交换。

Net Device篇

工具梳理

网络设备相关的工具常被用来检测网络性能指标,以及“整形”网络流量。随着网卡配置的升级,很多新的工具能帮助系统更多地在网络中发挥作用。(如:多队列网卡的RPS、RFS、RSS、DPDK等等)

基础建设的重要性,将激发应用的上限,网络(一种分布式系统)又何尝不是如此。

TC
简单解释下Qdisc

tc 关注的是网络设备上的Qdisc队列(一种本地队列),常用于监控Qdisc和操作Qdisc实现流量整形的目的。

tc可以对三种对象(qdisc、class、filter)设置。

  1. qdisc:队列规则的缩写,最主要用于流量控制的“元素”,因为内核发送/接收数据包都需要进入一个接口,接口上有qdisc配置用于排队。请注意,“离开qdisc”不意味离开网卡。让qdisc“整形”之后,内核会尽可能多的从qdisc中获取数据包,再将它们转送到网络适配器上,再让TX/RX队列(另一种本地队列)去处理。
    在这里插入图片描述

  2. class:class对象是因为常遇到qdisc里套qdisc的状况,真实的排队情况在class内的qdisc上,外部的qdisc是负责将class对象看成“需要排出的包”,调度哪一个class对象内的qdisc出包。
    在这里插入图片描述

现在qdisc看上去更符合一个队列调度器了。

  1. filter:filter对象被classful qdisc使用,用于负责“内核将数据包交由哪个class对象的qdisc排队的工作”,简白点说是流量分类包分类
TC的使用

查看qdisc流量管理信息
tc qdisc show
在这里插入图片描述
tc qdisc add dev ens192 root netem delay 100ms
将网络设备ens192设置成发包时延100ms
在这里插入图片描述

tc不仅可以设置时延、丢包、带宽,还可以模拟延迟波动

tc qdisc add dev ens192 root nettem delay 100ms 10ms

包重复

tc qdisc add dev ens192 root netem duplicate 1%

包损坏

tc qdisc add dev ens192 root netem corrupt 0.2%

包乱序

tc qdisc add dev ens192 root netem delay 5ms reorder 25% 50%
tc qdisc add dev ens192 root netem delay 100ms 10ms

在这里插入图片描述
在tc上仿真任何你想要的网络环境,root netem 不正是tc在提醒学习者它是一个root下的net-emulation吗?

ethtool

随着网卡设备的快速演进(尤其是单队列到多队列的变迁),和NIC挂钩的ethtool工具无疑是分析NIC设备和驱动的利器。

ethtool也是一种多功能工具集,不仅可以静态分析NIC相关联的当前信息,还能够调整参数帮助使用者“合情”利用网卡设备所提供的功能。


参考列表

[1] @HJX-ABC的Linux性能分析调优

未完待续