回答:
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にデプロイされたときに関数が同様に実行されることを確認できます。ただし、機能にはすでに非常に高いレベルの自信があり、それらが適切に動作することを検証するだけで十分ではありません。
完全に答えることはできないかもしれませんが、ラムダでの限られた経験からの私の見解は次のとおりです。
monitoring
タブのダッシュボードに表示されます。これは次のようになります。スロットル/エラー/呼び出し回数も同様です。
IOpipeプロファイラーをチェックして、Lambda呼び出しから完全なv8プロファイラーダンプを取得します。これらをChrome Devtoolsにロードして、CPU時間の正確な使用場所と、関数でメモリがどのように使用されているかを正確に確認できます。
免責事項:IOpipeで働いています
StackImpactエージェントを使用して、CPUおよびメモリプロファイルを取得します。詳細については、ブログ投稿「AWS Lambda CPUおよびメモリプロファイリング(Node.js)」を参照してください。Lambda Node.jsプロセスはリクエスト間でフリーズするため、他のツールのほとんどはおそらくそのままでは機能しません。
免責事項:StackImpactで働いています