You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda调用偶发EPROTO错误排查请求(Node.js环境)

AWS Lambda偶发Runtime.UnhandledPromiseRejection: Error: write EPROTO错误排查
  • 使用Node.js 14版本的AWS Lambda函数,近期每周偶发一次调用错误,怀疑与Lambda超时或MongoDB连接有关,但无法确定
  • 多数情况下调用正常,已升级Node.js到16版本,问题仍存在
  • 核心错误信息:Runtime.UnhandledPromiseRejection: Error: write EPROTO

错误日志

2022-12-19T14:30:40.715Z 2a5e8a43-a315-40e2-a151-97b6630d9d95 ERROR Unhandled Promise Rejection {
    "errorType": "Runtime.UnhandledPromiseRejection",
    "errorMessage": "Error: write EPROTO",
    "reason": {
        "errorType": "Error",
        "errorMessage": "write EPROTO",
        "code": "EPROTO",
        "errno": -71,
        "syscall": "write",
        "$metadata": {
            "attempts": 1,
            "totalRetryDelay": 0
        },
        "stack": [
            "Error: write EPROTO",
            "    at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:94:16)"
        ]
    },
    "promise": {},
    "stack": [
        "Runtime.UnhandledPromiseRejection: Error: write EPROTO",
        "    at process.<anonymous> (/var/runtime/index.js:35:15)",
        "    at process.emit (events.js:400:28)",
        "    at process.emit (domain.js:475:12)",
        "    at processPromiseRejections (internal/process/promises.js:245:33)",
        "    at processTicksAndRejections (internal/process/task_queues.js:96:32)"
    ]
}

函数代码

const repository = new CustomerRepository();
export const getCustomers: any = middlewareBuilder(async (event, _context) => {
    try {
        logger.info('getCustomer start');
        const customers = await repository.findAllCustomers(); // get data from db
        logger.info({ message: ' fetch all customers ', additionalInfo: customers });
        logger.info('getCustomer end  ');
        return httpResult(200, customers);
    } catch (error) {
        logger.error('error ' + error);
        throw error;
    }
});

排查方向建议

  1. MongoDB连接管理

    • Lambda执行环境会被复用,若CustomerRepository中的MongoDB连接未做状态校验,可能出现闲置超时的无效连接,写入时触发EPROTO错误。需检查连接池配置,设置合理的连接超时、闲置超时参数,每次调用前验证连接有效性,无效则重建连接。
    • 确认MongoDB端的连接数限制,排查是否因并发连接超限导致的连接中断。
  2. 网络与SSL配置

    • EPROTO属于TCP/SSL层错误,可能是Lambda与MongoDB之间的网络波动、SSL证书兼容性问题。检查MongoDB的SSL证书是否有效,确保Lambda信任该证书;若Lambda部署在VPC内,检查安全组、NACL规则是否允许持续网络连接,排查偶发的网络中断情况。
    • 临时延长Lambda超时时间,排除因业务逻辑执行时间接近超时阈值导致的异常。
  3. Promise异常捕获

    • 错误提示UnhandledPromiseRejection,需确认middlewareBuilder内部是否存在未捕获的Promise异常,或findAllCustomers方法中是否有未被try/catch覆盖的异步逻辑。确保所有异步操作的异常都被正确捕获处理。
  4. 依赖版本适配

    • 检查MongoDB驱动版本,部分旧版本驱动在Node.js 16环境下可能存在兼容性bug,尝试升级到最新稳定版驱动,修复已知的TCP连接问题。

内容的提问来源于stack exchange,提问作者Natan Yalo Fcado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:15:36