我想要排查我的 EC2 Linux 实例内的性能瓶颈。我可以在 EC2Rescue for Linux 中使用哪些高级工具执行此操作?

上次更新时间:2021 年 1 月 4 日

我想要排查运行 Amazon Linux 1 或 2、RHEL 或 CentOS 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例内的性能瓶颈。我可以在 EC2Rescue for Linux 中使用哪些工具执行此操作?

简短描述

运行 Amazon Linux 1 或 2、RHEL 或 CentOS 的 Linux 实例上的性能瓶颈可能出现在 CPU 性能、块 I/O 性能或网络性能上。要确定性能瓶颈出现在何处,您可以利用 EC2Rescue for Linux 中提供的 33 种工具,并使用 eBPF(扩展 Berkeley 数据包过滤器)中的 bcc 框架。eBPF 可在生产环境中高效且安全地运行监控工具,而没有显著的性能开销。

注意:此解决方法不适用于运行 Debian 或 Ubuntu 的实例。

解决方法

(适用于经验丰富的 Linux 系统管理员)

为您的操作系统安装 bcc 软件包。

1.    使用 SSH 连接到您的实例。

2.    安装 bcc 软件包。有关除 Amazon Linux 之外的其他发行版的下载和安装说明,请参阅特定于该发行版的文档。对于 Amazon Linux 实例,请使用以下命令:

$ sudo yum install bcc

3.    bcc 工具必须位于操作系统上的 PATH 变量中,这样 EC2 Rescue for Linux 才能运行它们。使用以下命令将工具置于 PATH 变量中:

$ sudo -s
# export PATH=$PATH:/usr/share/bcc/tools/

4.    最佳做法是将 PATH 设置永久添加到 Linux 系统。用于使此设置永久有效的步骤因特定 Linux 发行版而异。对于 Amazon Linux,请使用以下命令:

使用 vi 编辑器打开 ~/.bash_profile

# vi ~/.bash_profile

/usr/share/bcc/tools 附加到 PATH 变量:

PATH=$PATH:$HOME/bin:/usr/share/bcc/tools

保存文件并退出 vi 编辑器。

获取更新的配置文件:

#source ~/.bash_profile

6.    下载并安装 EC2 Rescue for Linux 工具,然后导航到实例上的安装目录。

以下是与 EC2Rescue for Linux 一起使用的基于 bcc 的常用模块。

CPU 性能工具

bccsoftirqs.yaml - 此模块运行用于跟踪软中断 (IRQ) 的 softirqs 工具,然后将计时统计数据存储在内核中以提高效率。可以使用 --时间段提供间隔,并使用 --次数参数提供计数。该工具将自动在每次运行时打印时间戳。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bccsoftirqs.yaml

bccrunqlat.yaml - 此程序显示任务等待了多长时间才轮到在 CPU 上运行。结果将显示为直方图。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bccrunqlat.yaml

# ./ec2rl run --only-modules=bccsoftirqs,bccrunqlat --period=5 --times=5

块 I/O 性能工具

bccbiolatency.yaml - 跟踪块设备 I/O,并记录附加到 EC2 实例的每个磁盘设备(例如实例存储和 Amazon Elastic Block Store (Amazon EBS))的 I/O 延迟(时间)分布。结果将打印为直方图。该模块将在指定的时间段内运行,并收集指定次数的输出。在以下示例中:时间段次数变量设置为 5。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bccbiolatency.yaml

bccext4slower.yaml - 使用 ext4slower 工具收集输出。ext4slower 将跟踪任何 ext4 读取、写入、打开和 fsync,默认情况下它们慢于 10 ms 的阈值。该模块将在指定的时间段内运行,并收集指定次数的输出。在以下示例中:时间段次数变量设置为 5。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bccext4slower.yaml

与 bccext4slower.yaml 类似,您可以将 bccxfsslower 模块用于 XFS 文件系统。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bccxfsslower.yaml

bccfileslower.yaml - 使用 fileslower 收集输出,它将跟踪基于文件的慢于 10 ms 默认阈值的同步读取和写入。该模块将在指定的时间段内运行,然后收集指定次数的输出。在以下示例中:时间段次数变量设置为 5。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bccfileslower.yaml

# ./ec2rl run --only-modules=bccbiolatency,bccext4slower,bccfileslower --period=5 --times=5

网络性能

bcctcpconnlat.yaml - 跟踪用于执行活动 TCP 连接的内核函数(例如,通过 connect() syscall)。结果显示连接的延迟(时间)。延迟是在本地测量的,它表示在指定时间段内从 SYN 发送到响应数据包的时间。TCP 连接延迟表示建立连接所花费的时间。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bcctcpconnlat.yaml

bcctcptop.yaml - 显示每个主机和端口在指定时间段和次数(不清除屏幕)内的 TCP 连接吞吐量。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bcctcptop.yaml

bcctcplife.yaml - 汇总在跟踪期间打开和关闭的 TCP 会话。有关更多信息,请参阅 GitHub 网站上的 EC2Rescue for Linux - bcctcplife.yaml

# ./ec2rl run --only-modules=bcctcpconnlat,bcctcptop,bcctcplife --period=5 --times=5

输出示例

在实例上一次运行一个或多个模块之后,可在 /var/tmp/ec2rl 目录下找到运行这些模块的结果。

以下示例是来自 bcctcptop 模块的输出,其时间段参数设置为 5,并且次数参数设置为 2

# ./ec2rl run --only-modules=bcctcptop --period=5 --times=2
        
# cat /var/tmp/ec2rl/2020-04-20T21_50_01.177374/mod_out/run/bcctcptop.log 
I will collect tcptop output from this alami box 2 times.
Tracing... Output every 5 secs. Hit Ctrl-C to end
21:50:17 loadavg: 0.74 0.33 0.17 5/244 4285
PID    COMM         LADDR                 RADDR                  RX_KB  TX_KB
3989   sshd         172.31.22.238:22      72.21.196.67:26601         0      9
21:50:22 loadavg: 0.84 0.36 0.18 4/244 4285
PID    COMM         LADDR                 RADDR                  RX_KB  TX_KB
3989   sshd         172.31.22.238:22      72.21.196.67:26601         0     11
2731   amazon-ssm-a 172.31.22.238:54348   52.94.225.236:443          5      4
2938   amazon-ssm-a 172.31.22.238:58878   52.119.197.249:443         0      0

您可以使用以下命令将结果上传到 AWS Support:

# ./ec2rl upload --upload-directory=/var/tmp/ec2rl/2020-04-20T21_50_01.177374 --support-url="URLProvidedByAWSSupport"

注意:前面命令中的引号是必需的。如果您使用 sudo 运行该工具,请使用 sudo 上传结果。运行命令 help upload 以获取有关使用 Amazon Simple Storage Service (Amazon S3) 预签名 URL 来上传输出的详细信息。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?