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 パフォーマンス、またはネットワークパフォーマンスで発生する可能性があります。パフォーマンスのボトルネックが発生している場所を特定するには、eBPF (拡張 Berkeley Packet Filter) の bcc フレームワークを使用して、Linux 用の EC2Rescue で利用できる 33 のツールを利用できます。eBPF は、大幅なパフォーマンスオーバーヘッドなしに、モニタリングツールを本番環境で効率的かつ安全に実行します。

解決方法

(経験豊富な 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 レイテンシー (時間) の分布を記録します。結果はヒストグラムとして出力されます。モジュールは指定された期間実行され、指定された回数だけ出力を収集します。以下の例では、periodtimes 変数が 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 を実行します。