我正在使用无服务器框架。我的Lambda函数连接到DynamoDB表以更新表中的项目。阅读&表的写容量单位是5& auto_scaling已禁用。 AWS Lambda函数分配了128MB内存。
我已经使用Jmeter进行性能测试。我已经同时发送了1000个请求,一些响应给了我完美的输出,而其他的则给出了内部服务器错误(502 Bad Gateway)。我还分析了cloudwatch的日志,只获得了Task Timeout错误。任何人都可以建议我为什么我得到这个错误以及如何解决它?
答案 0 :(得分:10)
使用无服务器框架时,AWS Lambda函数的默认超时为6秒。只需将其更改为更高的值,如documentation中所述:
functions:
hello:
...
timeout: 10 # optional, in seconds, default is 6
答案 1 :(得分:4)
由于您提到您的DynamoDB表仅配置了5个WCU,这意味着每秒只允许5次写入。
DynamoDB确实提供突发容量,允许您使用300秒的累积容量(在5 WCU时它相当于1500个总写入请求)但是一旦耗尽它就会开始节流。
DynamoDB客户端具有内置的自动重试功能,具有指数退避功能,并且足够智能识别限制功能,因此它会减慢重试次数,使得单次写入可以轻松地需要几秒钟才能成功完成节流。
你的Lambda函数很可能在6秒时超时,因为该函数正在等待重试Dynamo。
因此,在进行负载测试时,请确保您的依赖项都已正确缩放。每秒1000个请求,您应确保相应地扩展DynamoDB表和/或索引的读/写容量分配。