# 背景
公司最近有一个容错率较高的业务,需要用到 FFMPEG 对图像进行处理,于是我们部署了一个简单的 NodeJS 应用到阿里云的函数计算上来实现业务上的需求。
简单的联调测试通过后,我们将服务推到了生产环境。
# 发现问题
服务投入生产环境使用一段时间后,间歇性的出现了服务异常。翻看监控后发现函数运行时偶尔会出现 函数错误:
而且日志中也出现多次
Error: Function timed out after 6 seconds (maxMemoryUsage: 125.04MB)
。
由于业务并不算复杂,测试阶段记录下来的响应时间也在我们的预期范围内,所以我们给这个函数设置足足 6 秒的超时时间,但日志表明生产环境依然多次出现超时的现象。
进一步观察函数监控后发现已使用内存几乎占满内存配额:
![已使用内存几乎占满内存配额](https://img-blog.csdnimg.cn/327302b02b3448e89031031c9c54969d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YKT6LaFLeeggeWGnOWKoOeCueS4rQ==,size_14,color_FFFFFF,t_70,g_se,x_16)
因为并发量不高,所以猜测可能是生产环境实例规格过低,导致在共享设备性能时无法在指定的超时时间内完成业务。
# 解决问题
基于上述猜测,我们把生产环境的实例规格从最低的 128 MB 升级到 256 MB 并继续观察生产环境中函数的表现。
事实证明猜测是正确的。实例规格翻倍后,函数错误再也没有出现,而且函数执行时间的均值与峰值之间的偏差也显著缩小,对外提供了更稳定的服务:
# 参考
# 推广
欢迎大家领取 阿里云优惠券 (opens new window), 新购续费更优惠, 更有最高 10 %
返现,详询 钉钉 (opens new window):
(opens new window)