Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AWS Lambda弹簧靴冷启动问题_Java_Spring Boot_Aws Lambda_Warm Up_Cold Start - Fatal编程技术网

Java AWS Lambda弹簧靴冷启动问题

Java AWS Lambda弹簧靴冷启动问题,java,spring-boot,aws-lambda,warm-up,cold-start,Java,Spring Boot,Aws Lambda,Warm Up,Cold Start,我是aws lambda的新手,我正在将基于spring boot 2.x的项目转移到lambda。但我正在努力解决lambda冷启动和预热的问题。我尝试了在这个链接中提到的一些事情,但应用程序仍然需要大约45秒才能启动 我尝试过的事情: 从上述链接进行异步初始化。这确实有点帮助,但还不够 跳过lambda的初始阶段。它帮助减少了近8秒 提供了并发性,但就我所见,这也没有帮助。当我看到日志时,每次都会初始化spring上下文,如果在15-20分钟的间隔后出现任何请求 我的lambda在不同场景下

我是aws lambda的新手,我正在将基于spring boot 2.x的项目转移到lambda。但我正在努力解决lambda冷启动和预热的问题。我尝试了在这个链接中提到的一些事情,但应用程序仍然需要大约45秒才能启动

我尝试过的事情:

从上述链接进行异步初始化。这确实有点帮助,但还不够

跳过lambda的初始阶段。它帮助减少了近8秒

提供了并发性,但就我所见,这也没有帮助。当我看到日志时,每次都会初始化spring上下文,如果在15-20分钟的间隔后出现任何请求

我的lambda在不同场景下的响应时间为:

1. 3008 MB memory/first request/ response time: ~25 secs.  
2. 3008 MB memory/2nd request immediately after 1st req/ response time: ~600ms.  
3. 1024 MB memory/1st req/ postman request times out.  
4. 1024 MB memory/2nd req immediately after 1st req/response time:  ~750ms.  
5. 1792 MB memory/1st req/ response time: ~27sec.  
6. 1792 MB memory/ 2nd req immediately after 1st req/response time:  ~650ms
为了缩短响应时间,我考虑每5或10分钟对lambda进行一次REST调用,以便将spring上下文保存在内存中,从而帮助更快地处理请求。此呼叫将类似于健康检查呼叫,更不用说根本没有处理

这是明智的做法吗?还是有更好的方法来实现这一目标

我不清楚AWS在这种情况下会收取多少费用。

一个5分钟的通话量将达到每月8600次左右。如果你连10万个电话都能打,根据3GB内存的计算器,这仍然是免费的

要将Cloudwatch配置为ping您的Lambda,请首先创建规则Cloudwatch->Rules,并每5分钟运行一次:

然后,让它运行您的Lambda:

本例中我的Lambda名为SnapshotHandler,它接受一个小JSON对象。注意,这直接调用Lambda,而不是通过API网关。这可能不是Lambda代码所期望的,因此您可能需要更新

如果希望通过HTTP/S API调用此Lambda,则需要设置一个SNS主题以将Cloudwatch事件发布到,并让SNS主题通过HTTP调用您的API。这有点复杂,但并不可怕

总之,您可以做到这一点,但成本取决于您的API得到多少正常调用。每月1000000次呼叫,3GB/800ms Lambda的价格约为33美元。1000万美元,将近400美元。但是如果你平均每秒接到230个电话,你似乎不太可能也需要心跳。

一个5分钟的通话量大约是每月8600个电话。如果你连10万个电话都能打,根据3GB内存的计算器,这仍然是免费的

要将Cloudwatch配置为ping您的Lambda,请首先创建规则Cloudwatch->Rules,并每5分钟运行一次:

然后,让它运行您的Lambda:

本例中我的Lambda名为SnapshotHandler,它接受一个小JSON对象。注意,这直接调用Lambda,而不是通过API网关。这可能不是Lambda代码所期望的,因此您可能需要更新

如果希望通过HTTP/S API调用此Lambda,则需要设置一个SNS主题以将Cloudwatch事件发布到,并让SNS主题通过HTTP调用您的API。这有点复杂,但并不可怕


总之,您可以做到这一点,但成本取决于您的API得到多少正常调用。每月1000000次呼叫,3GB/800ms Lambda的价格约为33美元。1000万美元,将近400美元。但是,如果平均每秒收到的呼叫数为230次左右,您似乎不太可能也需要心跳。

您确定将其移动到lambda是个好主意吗?我知道在lambda中使用spring boot这样的重型框架是不可取的,但我需要这样做。如果配置的并发性没有帮助,您可能在正确配置时遇到问题。您确定将其移动到lambda是一个好主意吗?我知道在lambda中不建议使用像spring boot这样的重型框架,但我需要这样做。如果配置的并发性没有帮助,您可能在正确配置时遇到问题。谢谢@stdunbar,这听起来很有希望。虽然我需要做一些调整,但我会试试这个。谢谢@stdunbar,这听起来很有希望。虽然,我将不得不做一些调整,我会尝试这个。