Amazon Linux 1、Amazon Linux 2、RHEL、または CentOS を実行する、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス内のパフォーマンスボトルネックをトラブルシューティングすることを考えています。そのために、EC2Rescue for Linux でどのようなツールを使用できますか?
簡単な説明
Amazon Linux 1、Amazon Linux 2、RHEL、または CentOS を実行しているインスタンスでのパフォーマンスのボトルネックは、CPU パフォーマンス、ブロック I/O パフォーマンス、またはネットワークパフォーマンスで発生する可能性があります。パフォーマンスのボトルネックが発生している場所を特定するには、eBPF (拡張 Berkeley Packet Filter) の bcc フレームワークを使用して、Linux 用の EC2Rescue で利用できる 33 のツールを利用できます。eBPF は、大幅なパフォーマンスオーバーヘッドなしに、モニタリングツールを本番環境で効率的かつ安全に実行します。
注: この解決は、Debian または Ubuntu を実行しているインスタンスには適用されません。
解決方法
(経験豊富な Linux システム管理者向け)
オペレーティングシステムに bcc パッケージをインストールします。
1. SSH を使用してインスタンスに接続します。
2. bcc パッケージをインストールします。Amazon Linux 以外のディストリビューションのダウンロードとインストールの手順については、ディストリビューションに固有のドキュメントをご覧ください。Amazon Linux インスタンスの場合、次のコマンドを使用します。
$ sudo yum install bcc
3. Linux 用 EC2 Rescue が実行するには、オペレーティングシステムの bcc ツールが PATH 変数に設定されている必要があります。次のコマンドを使用して、ツールを PATH 変数に指定します。
$ sudo -s
# export PATH=$PATH:/usr/share/bcc/tools/
4. Linux システムに PATH 設定を永続的に追加することをお勧めします。この設定を永続的にする手順は、特定の 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. Linux 用 EC2 Rescue ツールをダウンロードしてインストールしてから、インスタンスのインストールディレクトリに移動します。
以下は、Linux 用 EC2Rescue で一般的に使用される bcc ベースのモジュールです。
CPU パフォーマンスツール
bccsoftirqs.yaml - このモジュールは、ソフト割り込み (IRQ) をトレースし、効率を高めるためにタイミング統計をカーネル内に保存する softirqs ツールを実行します。間隔は --period 引数、カウントは -times 引数を使用して指定できます。ツールは、実行ごとにタイムスタンプを自動的に出力します。詳細については、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 レイテンシー (時間) の分布を記録します。結果はヒストグラムとして出力されます。モジュールは指定された期間実行し、指定された回数だけ出力を収集します。以下の例では、period および times 変数が 5 に設定されています。詳細については、GitHub ウェブサイトの「EC2Rescue for Linux - bccbiolatency.yaml」を参照してください。
bccext4slower.yaml - ext4slower ツールを使用して出力を収集します。ext4slower は、デフォルトでしきい値 10 ミリ秒より低速な ext4 の読み取り、書き込み、オープン、および fsync をトレースします。モジュールは指定された期間実行し、指定された回数だけ出力を収集します。以下の例では、period および times 変数が 5 に設定されています。詳細については、GitHub ウェブサイトの「EC2Rescue for Linux - bccext4slower.yaml」を参照してください。
XFS ファイルシステムでは、bccext4slower.yaml と同様に bccxfsslower モジュールを使用できます。詳細については、GitHub ウェブサイトの「EC2Rescue for Linux-bccxfsslower.yaml」を参照してください。
bccfileslower.yaml - ファイルベースの同期読み取り/書き込みをトレースする fileslower を使用して出力を収集します。この出力は、デフォルトのしきい値 10 ミリ秒より遅くなります。モジュールは指定された期間実行し、指定された回数だけ出力を収集します。以下の例では、period および times 変数が 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
出力例
これらのモジュールの実行結果は、インスタンスで 1 つ以上のモジュールを 1 回実行するたびに、/var/tmp/ec2rl ディレクトリの下に生成されます。
次の例は、period パラメータを 5 に設定し、times パラメータを 2 に設定した場合の bcctcptop モジュールからの出力です。
# ./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 サポートに結果をアップロードするには、次のコマンドを使用します。
# ./ec2rl upload --upload-directory=/var/tmp/ec2rl/2020-04-20T21_50_01.177374 --support-url="URLProvidedByAWSSupport"
注: 上記のコマンドの引用符は必須です。sudo でツールを実行する場合は、sudo を使用して結果をアップロードします。Amazon Simple Storage Service (Amazon S3) の署名付き URL を使用して出力をアップロードする方法の詳細については、コマンド help upload を実行します。
関連情報
EC2 Windows インスタンスにおける高 CPU 使用率を診断するにはどうすればよいですか?