如何解决AWS Lambda Chalice 层分割错误
我正在通过 Chalice 部署 Python 3.7 Lambda 函数。由于其环境要求的代码大于 50 MB 限制,因此我使用 Chalice 的“automatic_layer”功能生成符合要求的层,即 awswrangler
。
由于生成的层 > 50 MB,我将生成的 managed-layer-...-python3.7.zip
手动上传到 s3 并创建一个 Lambda 层。然后我使用 chalice 重新部署,删除 automatic_layer
选项并将 layers
设置为我手动创建的层的生成 ARN。
以这种方式部署的函数可以正常运行几次,然后偶尔会因“分段错误”而开始失败。错误率很快增加,现在失败了 100%。
追溯:
OpenBLAS 警告 - 无法确定此系统上的 L2 缓存大小,假设为 256k 开始请求 ID:3b98bd4b-6cda-4d21-8090-1a49b17c06fc 版本:$LATEST OpenBLAS 警告 - 无法确定此系统上的 L2 缓存大小,假设为 256k 结束请求 ID:3b98bd4b-6cda-4d21-8090-1a49b17c06fc 报告 RequestId:3b98bd4b-6cda-4d21-8090-1a49b17c06fc 持续时间:7165.04 ms 计费持续时间:7166 ms 内存大小:128 MB 已用最大内存:41 MB RequestId:3b98bd4b-6cda-4d21-8090-1a49b17c06fc 错误:运行时退出错误:信号:分段错误(核心转储) 运行时.退出错误
由于awswrangler
本身需要boto3&botocore,而且已经在Lambda环境中,所以怀疑可能是boto不同版本冲突。我通过在要求中明确包含 boto3 和 botocore 来尝试相同的流程,但我仍然收到相同的分段错误错误。
非常感谢任何帮助。
解决方法
您可以使用 AWS X-Ray 获取有关该问题的更多信息:https://docs.aws.amazon.com/lambda/latest/dg/python-tracing.html
此外,您可以分析在 bash shell 上执行 lambda 函数时生成的核心转储:
ulimit -c unlimited
cd /tmp
ececute your python ...
您应该找到一个名为 /tmp/core..... 的文件,您应该在下载后使用 gdb 对其进行分析。命令“man core”可以帮助你。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。