0

我在 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 分钟,但 lambda 函数冷启动至少20 次24 小时内,每次需要超过10 秒

4

1 回答 1

0

如果我正确理解了您的设置,那么您正在使用每分钟运行一次的热身调用。

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

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

如果确实如此,您将不得不在热身阶段发出更多的调用(接近您希望服务接收的调用的数量)。

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

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

于 2018-05-14T01:25:21.167 回答