Java 从AWS Lambda获取URL时出现无声错误
我正在尝试从AWS Lambda获取网页内容,但它以静默方式失败,CloudWatch日志只包含以下行(超时设置为10秒,因此持续时间为10000ms): 启动请求ID:f101849f-1219-411b-8875-8944a76de937版本:$最新Java 从AWS Lambda获取URL时出现无声错误,java,amazon-web-services,aws-lambda,Java,Amazon Web Services,Aws Lambda,我正在尝试从AWS Lambda获取网页内容,但它以静默方式失败,CloudWatch日志只包含以下行(超时设置为10秒,因此持续时间为10000ms): 启动请求ID:f101849f-1219-411b-8875-8944a76de937版本:$最新 结束请求ID:f101849f-1219-411b-8875-8944a76de937 报告请求ID:f101849f-1219-411b-8875-8944a76de937持续时间:10008.39毫秒 我运行的代码只是获取URL并读取内容。
结束请求ID:f101849f-1219-411b-8875-8944a76de937 报告请求ID:f101849f-1219-411b-8875-8944a76de937持续时间:10008.39毫秒 我运行的代码只是获取URL并读取内容。它在本地环境下工作正常,但在AWS Lambda上测试时却不行:
public class TestHandler implements RequestHandler<Object, String>{
@Override
public String handleRequest(Object o, Context context) {
try {
Connection con = HttpConnection.connect(new URL("https://www.google.com"));
con.timeout(40000);
return con.get().getAllElements().toString();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
公共类TestHandler实现RequestHandler{
@凌驾
公共字符串handleRequest(对象o,上下文){
试一试{
Connection con=HttpConnection.connect(新URL(“https://www.google.com"));
con.超时(40000);
返回con.get().getAllegements().toString();
}捕获(IOE异常){
System.out.println(e.getMessage());
}
}
}
在处理请求时我不知道的任何AWS限制?Java容器需要时间来启动。在您的情况下,您也正在点击Lambda,并且您可能知道,如果没有请求,Lambda将保持在冷态。它只有在请求到来时才会唤醒。此外,Lambda配置中的超时设置为10秒。请从Lambda UI屏幕增加它。作为一名java开发人员,我建议您删除不必要的jar或maven依赖项(如果您能找到的话)。请先增加时间,然后重试。问题来自设置为默认128MB的内存限制不足。 当我增加到256MB时,连接按预期工作,并检索页面内容。
因此,当lambda达到最大内存限制时,AWS会在CloudWatch中杀死它,而不会显示任何消息(如果它在超时时被杀死,您会得到它)您的lambda是否在VPC中?您是否尝试增加Lambda的超时?Lambda是同步运行还是异步运行?它是否将承诺返回给调用方/运行时?在这种情况下,瓶颈来自内存约束