如何对AWS Lambda函数进行性能测试?


14

AWS Lambda成本取决于函数运行的时间,并且在某种程度上取决于内存占用量。具有更快完成的功能并占用更少的内存可以节省很多钱。特别是在经常执行这种功能时。

如何调整Node.js Lambda函数的速度和较小的内存占用量以节省成本?

Lambda是否有其他方面需要改进?

Answers:


6

Dawny33的响应很好,但是我会在开发过程中更早地开始。

密切关注您的云环境以确保您的功能按预期运行(包括可能在不同数据集上运行的“生产”功能)非常重要,因为它可能会揭示无法在本地或通过本地复制的内容测试数据集。

尽管如此,我要说的是,出于优化目的而进行的性能测试应该直接从开发人员的机器开始。或者至少在迁移到云之前从某些本地环境中获取。

我之所以这么说是因为,尽管AWS Lambda在很多方面都令人赞叹,但您对服务器没有完全控制的事实将限制您的检测能力。我不是说在无服务器时,仪器是不可能的,但尽量搞清楚有多少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是一个示例,但这只是可用的探查器之一。安装事件探查器,运行功能,优化。除非您有特定于AWS的问题,否则它是否将在AWS Lambda上运行都无关紧要。我将根据您的评论更新答案。
亚历山大

可以完成此工作的一些示例以及指向文章,博客,已知分析器的链接。这就是imho使答案变得有价值的事情,而不仅仅是让人们在“我怎么计算我的cpu中断,我一无所知”的某个地方问一个问题。
Evgeny

好点子。我再次提高了答案。
亚历山大

5

我可能无法完全回答,但以下是我对lambda的有限经验:

  1. 速度性能: Lambda函数的单个仪表板的运行时间将显示在Lambda monitoring选项卡的仪表板中,如下所示:

在此处输入图片说明

油门/错误/调用次数也是如此。

  1. 还可以为 lambda函数的内存使用设置CloudWatch过滤器,该过滤器的数据可用于进一步优化处理程序。是关于如何设置一个不错的帖子。
  2. 另外,设置适当的日志记录,以便以后可以查看CloudWatch中的日志。这本身并不是一个优化技巧,而是更多的最佳实践
  3. 测试:全面测试您的lambda函数,以确保您不会错过任何情况。这很重要,因为lambda在放弃之前会重试失败的功能。因此,如果您正确测试了该功能,则可以节省时间。Lambda函数测试指南

5

IOpipe分析器,以从Lambda调用中获取完整的v8分析器转储。您可以将它们加载到Chrome Devtools中,以准确了解CPU时间在哪里以及如何将内存用于功能。

在此处输入图片说明

免责声明:我为IOpipe工作


0

使用StackImpact代理获取CPU和内存配置文件。博客文章中的更多详细信息:AWS Lambda CPU和内存性能分析(Node.js)。由于Lambda Node.js进程在两次请求之间处于冻结状态,因此大多数其他工具可能无法立即使用。

在此处输入图片说明

免责声明:我为StackImpact工作


虽然听起来很相关,而且可能是有效的解决方案,但对它可能如何帮助解决该问题进行一些扩展将避免出现链接的感觉,只有在链接腐烂的情况下,才对如何提供帮助有了一个初步的想法。
Tensibai '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.