gpt4 book ai didi

r - AWS lambda R 运行时段错误

转载 作者:行者123 更新时间:2023-12-01 11:14:51 24 4
gpt4 key购买 nike

我正在尝试创建一个运行时层,以使用它们的 new runtime API 启用 R 作为 lambda 函数的运行时.

为此,我创建了一个包含 R 所需的所有依赖项的层,然后创建了包含 R 本身的第二层。我使用运行 lambda 的同一个 Amazon AMI 构建了这些层。我通过压缩我的层来测试我的构建,创建一个新的实例,然后将层下载并解压缩到该新实例中(将所有内容放在/opt 中,这也恰好是我在构建它们时安装 R 及其依赖项的位置) .我使用了资源最少的实例类型(2 cpu,4GB RAM)。据我了解,这应该非常接近 lambda 环境。

我有一个小测试脚本 (test.r),它只是将一条消息打印到标准输出。
这在测试环境中运行良好。这是脚本:

cat("hello from planet lambdar")

这是在我的层的引导脚本中调用它的方式:
SCRIPT=$LAMBDA_TASK_ROOT/$(echo "$_HANDLER" | cut -d. -f1).r
echo "About to run $SCRIPT"
/opt/R/bin/Rscript $SCRIPT

从下面的日志中,很明显脚本的名称被正确发送和解析。我之前已经确认脚本 test.r 按预期位于/var/task 中。但是通过 lambda 运行此脚本会导致段错误:
START RequestId: 2c1b8801-f903-11e8-a32d-796c039278f1 Version: $LATEST
About to run /var/task/test.r
/opt/bootstrap: line 18: 18 Segmentation fault (core dumped) /opt/R/bin/Rscript $SCRIPT

如果该流程在运行与 lambda 使用的相同 Amazon AMI 的最小 EC2 实例上运行良好,并且加载了我为添加到 lambda 函数的层创建的相同工具和依赖项集,我该如何调试此段错误?

最佳答案

在这种情况下,结果证明我在将链接到 R 可执行文件的共享库复制到我的层时过于激进。我拿走了列出的所有东西

ldd /opt/R/lib/libR.so

并将其复制到/opt/lib

问题是这些库中有许多已经在 AMI 中,并且它们位于不同的位置会导致问题(可能与库缓存有关?)。

通过仅移动不在 AMI 中的两个库(但在我安装构建工具时添加的库,当然不在 Lambda 环境中),段错误就消失了。这两个库是:
/usr/lib64/libgfortran.so.3
/usr/lib64/libquadmath.so.0

回答更深层次的问题 在这里,即如何在Lambda环境中调试segfaults,我找到了灵感 here ,并在我的 bootstrap 中包含了类似的内容从核心转储打印回溯的脚本:
gdb -q -n -ex bt -batch /opt/R/bin/Rscript /temp/core.N.XXXX

其中 core.N.XXXX 是核心转储文件的名称(可以通过将 echo $(ls /tmp) 放入您的 bootstrap 脚本中来发现)。然后,cloudwatch 日志将至少包含来自回溯的一些提示。

关于r - AWS lambda R 运行时段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53644056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com