使用java的AWS Lambda Cold Start花费超过10秒

时间:2018-02-21 03:38:49

标签: java amazon-web-services aws-lambda cold-start

我在java上的AWS上有lambda函数,具有以下规范:

代码大小:35 MB 功能内存:3GB 超时:5分钟 Cloudwatch升温时间表:1分钟

我正在使用JRestless Wrapper。

以下是我的RequestHandler方法:

    public class RequestHandler extends GatewayRequestObjectHandler {
    static ResourceConfig resourceConfig = new ResourceConfig().register(GatewayFeature.class)
            .register(RequestContextFilter.class).packages("com.xyz.abcd");

    static RequestHandler bc = new RequestHandler();
    static {
        resourceConfig.property("contextConfigLocation", "classpath:web-application-context.xml");
        bc.init(resourceConfig);
        bc.start();
    }

    /**
     * 
     */
    public RequestHandler() {
        super();
    }
}

尽管升温至少为1分钟,λ功能冷启动至少 20次 24小时且每次需要超过 10秒< /强>

1 个答案:

答案 0 :(得分:0)

如果我正确地解决了您的设置问题,您将使用每分钟运行的预热调用。

您的函数的并发限制是多少?如果有多个调用到达lambda并且并发级别高于1,那么每个额外的调用/请求都会得到一个冷启动。

这是一个非常典型的突发流量场景。

如果情况确实如此,那么您必须在预热阶段发出更多的调用次数(接近您希望服务接收的次数)。

确保您还要将这些短路,以避免不必要的成本和潜在的下游压力。

您可能遇到冷启动的另一个原因是您的功能运行的硬件或容器存在问题而且必须死亡,即您无法控制的因素。即使在这些情况下,上述设置也有助于将冷启动次数降至最低。