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

上次更新时间:2020 年 5 月 8 日

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

简短描述

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

解决方法

(适用于经验丰富的 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 来上传输出的详细信息。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?