记一次阿里云函数计算超时调试

限量阿里云优惠券 (opens new window)

# 背景

公司最近有一个容错率较高的业务,需要用到 FFMPEG 对图像进行处理,于是我们部署了一个简单的 NodeJS 应用到阿里云的函数计算上来实现业务上的需求。

简单的联调测试通过后,我们将服务推到了生产环境。

# 发现问题

服务投入生产环境使用一段时间后,间歇性的出现了服务异常。翻看监控后发现函数运行时偶尔会出现 函数错误服务上线后偶尔会出现函数错误 而且日志中也出现多次 Error: Function timed out after 6 seconds (maxMemoryUsage: 125.04MB)

由于业务并不算复杂,测试阶段记录下来的响应时间也在我们的预期范围内,所以我们给这个函数设置足足 6 秒的超时时间,但日志表明生产环境依然多次出现超时的现象。

进一步观察函数监控后发现已使用内存几乎占满内存配额:

已使用内存几乎占满内存配额

因为并发量不高,所以猜测可能是生产环境实例规格过低,导致在共享设备性能时无法在指定的超时时间内完成业务。

# 解决问题

基于上述猜测,我们把生产环境的实例规格从最低的 128 MB 升级到 256 MB 并继续观察生产环境中函数的表现。

事实证明猜测是正确的。实例规格翻倍后,函数错误再也没有出现,而且函数执行时间的均值与峰值之间的偏差也显著缩小,对外提供了更稳定的服务: 内存规格翻倍后的监控对比

# 参考

# 推广

欢迎大家领取 阿里云优惠券 (opens new window), 新购续费更优惠, 更有最高 10 % 返现,详询 钉钉 (opens new window): 限量阿里云优惠券 (opens new window)