我正在尝试从S3中提取一个大文件,并使用pandas数据帧将其写入RDS。
我一直在搜索该错误,却从未在任何地方看到它,有人知道这个极其普通的听起来错误可能意味着什么吗?我以前遇到过内存问题,但是扩展内存消除了该错误。
{
"errorType": "Runtime.ExitError",
"errorMessage": "RequestId: 99aa9711-ca93-4201-8b1e-73bf31b762a6 Error: Runtime exited with error: signal: killed"
}
答案 0 :(得分:12)
答案 1 :(得分:4)
由于 boto3 并行上传文件,您已达到内存限制。 您可以增加 lambda 的内存使用量,但这是作弊……您只会支付更多费用。
默认情况下,S3 cli 使用 multipart_threshold=8MB
并行线程下载大于 max_concurrency=10
的文件。这意味着它将为您的数据使用 80MB,加上线程开销。
例如,您可以减少到 max_concurrency=2
,它将使用 16MB,它应该适合您的 lambda 内存。
请注意,这可能会略微降低您的下载性能。
import boto3
from boto3.s3.transfer import TransferConfig
config = TransferConfig(max_concurrency=2)
s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME', Config=config)
参考:https://docs.aws.amazon.com/cli/latest/topic/s3-config.html
答案 2 :(得分:3)
首先,aws-lambda
并不意味着要进行长时间的繁重操作,例如从S3提取大文件并将其写入RDS。
根据文件大小和数据,此过程可能花费太多时间。 aws-lambda的最长执行时间为15分钟。因此,您在lambda中执行的任何任务都应在您提供的时限内完成(最多15分钟)。
在lambda中进行大而繁重的处理时,您可能会遇到内存不足错误,超时错误或有时需要扩展处理能力的情况。
进行此类繁重处理的另一种方法是使用AWS Glue
作业,该作业是AWS托管的ETL
服务。
答案 3 :(得分:1)
它不会在 15 分钟时超时,因为这会记录此错误“任务在 901.02 秒后超时”,而 OP 没有得到该错误。正如其他人所说,他的内存不足。