AWS Lambda関数のパフォーマンスをテストするにはどうすればよいですか?


14

AWS Lambdaのコストは、関数の実行時間と、ある程度のメモリフットプリントに依存します。より速く終了し、より少ないメモリを使用する関数を使用すると、かなりのお金を節約できます。特に、そのような機能が頻繁に実行される場合。

Node.js Lambda関数を調整して、コストを節約するために速度とメモリフットプリントを小さくするにはどうすればよいですか?

改善するのに有利なLambdaの他の側面はありますか?

回答:


6

Dawny33の応答は良好ですが、開発プロセスの早い段階で開始します。

クラウド環境を監視して、機能が期待どおりに動作することを確認してください(異なるデータセットで動作する可能性のある「本番」機能を含む)。これは、ローカルまたはテストデータセット。

それでも、最適化の目的で行うこのパフォーマンステストは、開発者のマシンから直接開始する必要があります。または、少なくとも、クラウドにプッシュする前のローカル環境から。

私がそう言う理由は、AWS Lambdasは多くの点で驚くべきことですが、サーバーを完全に制御できないという事実により、計測機能が制限されるためです。サーバーレスではインストルメンテーションが不可能だと言っているわけではありませんが、楽しみのために CPU割り込みの数(およびコードによって引き起こされる割り込みの数)を把握してみてください ;)

したがって、私がアドバイスするのは、これが実際にサーバーレスに限定されるものではなく、プロファイリングを早期に開始することです。NodeJSプロファイリングは、さまざまなツールで作成できます。NewRelic、dynatrace、AppDynamicは、いくつかの大きなプレーヤーです。小さいプレーヤーもあります。それらのいくつかは、インストールするNPMパッケージです(Nodeflyなど)。V8エンジンにはプロファイラーが組み込まれているため、追加のツールなしでNodeJSを実行することもできます。このドキュメントNodeJSからのはあなたを始めるでしょう。

どのツールを選択しても、ローカルにインストールしてプロファイリングデータを収集します。これには、エージェントの実行やpackage.jsonにパッケージを含めることが含まれます。ツールの手順に、インストール方法が記載されています。優れたプロファイラーを使用すると、使用するメモリとCPUの量がわかります。より優れたツールを使用すると、リモートコールが何回行われたか、どのくらいの時間がかかったかを把握できます。

ツールが提供するプロファイリングデータを使用して、ボトルネックを特定し、対処します。プロファイリングの量に制限はありません。一部の人々(クレイジー?)は、最も重要な機能のシステムコールを確認します。ナノ秒の関数を削るには、そのようなことをしなければならないかもしれません(しかし、AWS Lambdaは最初から最適な選択ではないかもしれません)。

この時点で、AWS Lambdaに固有のことは何も言及していないことにも注意してください。これは、最適化がAWS Lambda固有ではない可能性が高いためです(結局、サーバーレスではサーバー/環境を心配する必要はありません)。

コードが機能するだけでなく、期待どおりに機能することを確認してください。過剰に最適化しないでください。ただし、CPUとメモリの使用量には注意してください。2MBの配列を並べ替えると、実際に10MBに拡大する必要がありますか?おそらくない。

次に、Dawny33で言及されているツールまたは他のツールを使用して、Lambdaにデプロイされたときに関数が同様に実行されることを確認できます。ただし、機能にはすでに非常に高いレベルの自信があり、それらが適切に動作することを検証するだけで十分ではありません。


はい、それは重要ですが、どのようにそれを行うことができますか?いくつかのツール、プラクティス、開発者が正確にできることはありますか?私はこの答えで言及されたもののどれも見ません:/
Evgeny

私はそう言った、プロファイリングと計装を通して。NewRelic APMは一例ですが、これは利用可能なプロファイラーの1つにすぎません。プロファイラーをインストールし、関数を実行して、最適化します。AWS固有の問題がない限り、AWS Lambdaで実行するかどうかは関係ありません。コメントに基づいて回答を更新します。
アレクサンドル

いくつかの例と記事、ブログ、仕事をすることができる既知のプロファイラーへのリンク。それは私に答えを価値のあるものにする種類のことで、「どこでCPU割り込みをカウントするのか、手がかりがありません」という質問をするように人々を送るだけではありません。
エフゲニー

いい視点ね。私は再び答えを改善しました。
アレクサンドル

5

完全に答えることはできないかもしれませんが、ラムダでの限られた経験からの私の見解は次のとおりです。

  1. 速度パフォーマンス:ラムダ関数の1回の実行の継続時間は、Lambdaのmonitoringタブのダッシュボードに表示されます。これは次のようになります。

ここに画像の説明を入力してください

スロットル/エラー/呼び出し回数も同様です。

  1. また、ラムダ関数のメモリ使用量に対してCloudWatchフィルターを設定できます。ラムダ関数のデータを使用して、ハンドラーをさらに最適化できます。これは、設定方法に関する適切な投稿です。
  2. また、後でCloudWatchでログを確認できるように、適切なログを設定します。これは、それ自体は最適化のハックではありませんが、ベストプラクティスの多くです
  3. テスト:ラムダ関数を徹底的にテストして、エッジケースを逃さないようにします。ラムダは、失敗した関数をあきらめる前に再試行するため、これは重要です。したがって、機能を適切にテストすれば、時間を節約できます。Lambda関数のテストガイド

5

IOpipeプロファイラーをチェックして、Lambda呼び出しから完全なv8プロファイラーダンプを取得します。これらをChrome Devtoolsにロードして、CPU時間の正確な使用場所と、関数でメモリがどのように使用されているかを正確に確認できます。

ここに画像の説明を入力してください

免責事項:IOpipeで働いています


0

StackImpactエージェントを使用して、CPUおよびメモリプロファイルを取得します。詳細については、ブログ投稿「AWS Lambda CPUおよびメモリプロファイリング(Node.js)」を参照してください。Lambda Node.jsプロセスはリクエスト間でフリーズするため、他のツールのほとんどはおそらくそのままでは機能しません。

ここに画像の説明を入力してください

免責事項:StackImpactで働いています


関連性があり、潜在的に有効なソリューションに聞こえますが、質問への対処に役立つ方法を少し拡張すると、リンクが腐敗した場合にどのように役立つかについての最初のアイデアを得ることができない場合にのみ、リンクの回答の感覚を避けることができます。
テンシバイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.