【问题标题】:Sharp on aws lambda. No space left on device while using .toBuffer在 aws lambda 上锐利。使用 .toBuffer 时设备上没有剩余空间
【发布时间】:2021-03-23 08:30:20
【问题描述】:

我正在尝试使用 nodejs sharp 调整分辨率为 16384x16384 或更高的图像大小。虽然该函数在本地机器上运行良好,但问题出现在 aws lambda 上。

我收到此错误“Runtime.UnhandledPromiseRejection: Error: wbuffer_write: write failed”,
“unix 错误:设备上没有剩余空间”

这台机器有 2024mb 内存,可以在较低分辨率的图像上正常工作,但使用较大的分辨率会引发错误。 输出分辨率应该是8192和4096

我尝试更改 sharp.cache 内存,重写函数,使其在 .toBuffer 之后立即发送文件,但它没有帮助,因为它在 .toBuffer 函数期间抛出错误。

我有点没有想法,非常感谢帮助。

有问题的代码:

async function changeResolution(){
        try { 
            var key = './image.jpg';
            var image = sharp(key, { limitInputPixels: false });
            return await image
            .resize(8192,8192)
            .toBuffer()
            .then(console.log("I do not get here"))
        } catch (error) {
            console.log(error);
            return;
        }
    }

【问题讨论】:

  • 源文件和目标文件有多大?这听起来像您在 Lambda 上的磁盘空间不足。完全未压缩的 16384x16384 JPG 将超过 1GB,而您在 Lambda 上被限制为 512MB。

标签: node.js aws-lambda sharp


【解决方案1】:

内存不是磁盘空间。

设备上没有剩余空间

此错误表示 Lambda 没有剩余磁盘空间。通常,如果您必须将文件写入 Lambda 中的磁盘,则将其写入/tmp。那里有 512MB 的存储空间,它应该是唯一可以实际写入文件的地方。

查看您的代码,您正试图在/tmp 之外 写入您的图像,我想没有足够的空间或没有空间供您写入。

首先,您应该尝试更改代码以将图像存储在/tmp/image.jpg

如果生成的图像大于 512MB,则您的选项将用尽。您可以将 EFS 卷挂载到您的 Lambda。

【讨论】:

  • 示例代码从“./image.jpg”读取图像并调整大小到缓冲区。我发现这个 SO 的原因是我得到了同样的错误,我从缓冲区加载图像。
猜你喜欢
  • 1970-01-01
  • 2018-06-29
  • 2020-12-16
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2021-01-07
  • 1970-01-01
相关资源
最近更新 更多