AWS Lambda(Node.js)是否跨执行共享内存?全局变量复用问题咨询
问题解答
特性判定结论
你观察到的全局变量跨请求复用现象是AWS Lambda的预期设计特性,不属于异常行为。
底层逻辑说明
Lambda为了优化冷启动性能,会在函数执行完成后将运行环境(容器/沙箱)保留一段时间,后续间隔较近的请求会优先复用已有的存活环境,而非重新冷启动新环境。同一运行环境内的全局作用域、静态变量、内存空间会被所有复用该环境的请求共享,这是官方公开的设计,目的是降低请求响应延迟。
你遇到的问题正是因为两次间隔极近的请求复用了同一个运行环境:
- 第一个携带
headerA1、headerB1的请求触发冷启动,初始化全局storage对象,且storage[headerA1]不存在,因此写入MyStorageDriver(headerB1)实例 - 第二个携带
headerA1、headerB2的请求复用同一环境,此时storage[headerA1]已存在,赋值逻辑不会触发,因此仍然保留第一个请求生成的实例。
方案相关提示
你当前采用的二级索引存储方案(以headerB为一级键、headerA为二级键)可以解决当前同headerA不同headerB的实例不更新问题,但需要注意两点:
- 全局变量的内存占用会随运行环境存活时间持续累积,若
headerB取值非常多,可能导致函数内存占用超过配置阈值 - 若业务场景不需要跨请求复用
MyStorageDriver实例,更简单的方案是将storage变量移动到handler函数内部,每次请求都会生成全新的storage对象,从根源上避免跨请求变量共享。
内容的提问来源于stack exchange,提问作者koalaok
相关产品推荐
相关产品推荐

