opsworksOpsWorksで管理しているインフラを運用していて、EC2インスタンスをスケールアウトした際に瞬間的に周囲のインスタンスのCPU使用率が高騰するのが気になり調べてみました。Instanceという構成となっていて、インスタンスには以下の3つのスケーリングタイプが存在しています。定義したしきい値や条件に応じて起動・停止するこの何れにも当てはまるのですが、インスタンスを起動させると同じレイヤー配下の既に起動しているインスタンスの負荷が高くなることに気づきました。負荷上昇が見込まれる事前にインスタンスを起動する場合については特に問題ないのですが、突発的なアクセスで負荷上昇している状況下の対応としてインスタンスを追加してスケールアウトする場合に瞬間的とはいえ負荷が高くなるのは少し気持ち悪いなと思って調べてみました。OpsWorksエージェントOpsWorksはレイヤー配下のインスタンスにOpsWorksエージェントがインストールされています。15330インスタンスが起動すると上記のようにエージェントプロセスが4つ起動しているのですが、上記から察するにそれぞれ以下のような役割を持っているのだと思います。各プロセスのログが/var/log/aws/opsworks配下に保持されているのですが、例えばopsworks-agent.process_command.logにはprocess_commandのログが出力されています。中を見るとこんな感じです。processかと思いますが、デプロイなど何かしらのコマンドを受け付けた場合はGenerating...やCreating...のようなログが出ていますね。OpsWorksエージェントを調べてみるどのように調査すべきか迷ったのですが今回はインスタンスを追加する前に各プロセスにstraceをかけて追加インスタンスの起動完了して落ちつくまでの約10分間のシステムコールと生成される子プロセスの個数について調べてみました。detachedmasterプロセスは平常時にstraceをかけていると特にforkされるような挙動を見せないので、インスタンス追加で影響を受けていることがわかります。具体的に何をしているかまではエージェントのソースまで追っかけていないので憶測ですが、/var/log/aws/opsworks/opsworks-agent.logを見ているとChefを実行する際のログ出力をしているように見えるのでその影響なのかもしれません。attachedが出力されました。単純に200回はforkがコールされているのではないかと思われます。10分間と一致したのでこちらはインスタンス起動の影響は特に受けずに完全に独立していることがわかります。:statisticsプロセスは30回程度出力されました。こちらも観察していると1分間に3回forkされているようなので計測した10分間と一致していてkeep_aliveと同じように独立してるようです。:process_commandプロセスが最も多く750回を超える出力がありました。こちらも平常時は1分間に4回程度forkするように見えるのですが、明らかにインスタンス追加の影響を受けていることがわかります。ここで少しミソなのがOpsWorksスタックのライフサイクルイベントです。ライフサイクルイベント公式ドキュメントにも記載があるのですが、Configureが以下の条件でスタックのすべてのインスタンスで実行される仕様となっています。インスタンスがオンライン状態に移行したか、オンライン状態から移行した。アドレスの関連付けを解除した。今回の場合は1つ目に該当すると思うのですが、インスタンスが起動する度にイベントが発生して更にカスタムレシピが設定されている場合はそちらも実行されることになるので、その影響を受けていると思われます。CPU負荷の高い処理で長く続くようなレシピを設定してしまうと引っ張られてしまいそうですね。ちなみに私が管理しているスタックにはそこまで重めの処理はないのですが瞬間的にCPU使用率が40〜50%程度上がります。まとめざっくりした調査しかしていないのですが、インスタンスを追加すると同一スタック上のインスタンスの負荷が高くなることが公式ドキュメントと実際のプロセスの挙動とリソースの負荷状況からふわっとですがおわかり頂けたかと思います。負荷ベースのインスタンス起動を使用している場合は特にこの辺りは注意が必要そうですね。どんな処理が割り込んでいるのかとかシステムコールの種類や回数等はまた改めて(気が向いた時に)調べて見たいと思います。初心者支部#13にお邪魔してきました。tukaeluはてなブログをはじめよう!tukaeluさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。