【问题标题】:AWS Lambda randomly get Operation timeout in 50msAWS Lambda 在 50 毫秒内随机获取操作超时
【发布时间】:2020-11-10 12:53:14
【问题描述】:

我在 Lambda 上运行带有 sequelize 的 nodejs,我的配置:

    pool: {
        max: 5,
        min: 0,
        acquire: 20000,
        idle: 10000
    }

环境:

Node: 10.x
Sequelize: 6.3.5
ERROR   Unhandled Promise Rejection 
{
    "errorType": "Runtime.UnhandledPromiseRejection",
    "errorMessage": "SequelizeConnectionAcquireTimeoutError: Operation timeout",
    "reason": {
        "errorType": "SequelizeConnectionAcquireTimeoutError",
        "errorMessage": "Operation timeout",
        "name": "SequelizeConnectionAcquireTimeoutError",
        "parent": {
            "errorType": "Error",
            "errorMessage": "Operation timeout",
            "stack": [
                "Error: Operation timeout",
                "    at Timeout._timeout.setTimeout (/var/task/node_modules/sequelize-pool/lib/Deferred.js:17:25)",
                "    at ontimeout (timers.js:436:11)",
                "    at tryOnTimeout (timers.js:300:5)",
                "    at listOnTimeout (timers.js:263:5)",
                "    at Timer.processTimers (timers.js:223:10)"
            ]
        },
        "original": {
            "errorType": "Error",
            "errorMessage": "Operation timeout",
            "stack": [
                "Error: Operation timeout",
                "    at Timeout._timeout.setTimeout (/var/task/node_modules/sequelize-pool/lib/Deferred.js:17:25)",
                "    at ontimeout (timers.js:436:11)",
                "    at tryOnTimeout (timers.js:300:5)",
                "    at listOnTimeout (timers.js:263:5)",
                "    at Timer.processTimers (timers.js:223:10)"
            ]
        },
        "stack": [
            "SequelizeConnectionAcquireTimeoutError: Operation timeout",
            "    at ConnectionManager.getConnection (/var/task/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:288:48)"
        ]
    },
    "promise": {},
    "stack": [
        "Runtime.UnhandledPromiseRejection: SequelizeConnectionAcquireTimeoutError: Operation timeout",
        "    at process.on (/var/runtime/index.js:37:15)",
        "    at process.emit (events.js:198:13)",
        "    at process.EventEmitter.emit (domain.js:448:20)",
        "    at emitPromiseRejectionWarnings (internal/process/promises.js:140:18)",
        "    at process._tickCallback (internal/process/next_tick.js:69:34)"
    ]
}

我还有另一个具有相同设置的 Lambda 函数(但使用节点 12 而不是节点 10),它每小时处理更多的请求,但每个请求的执行次数更少,并且运行良好。

问题是这个 Lambda 函数只是偶尔超时,而且只有在 10-50 毫秒后才超时 我不知道这是怎么发生的。代码中没有使用事务。任何帮助都感激不尽。谢谢

【问题讨论】:

  • 池设置应该是acquireTimeoutMillis,但您看到的错误来自尝试从池中获取连接。默认超时时间为 30 秒。

标签: node.js aws-lambda sequelize.js


【解决方案1】:

致遇到此错误的任何人。就我而言,在您建立与数据库的连接后,任何未处理的错误都不会记录到堆栈跟踪中,并且会返回此错误。

我认为这是由于 Nodejs 试图关闭连接造成的。

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 2014-04-24
    • 2021-05-28
    • 1970-01-01
    • 2021-08-23
    • 2021-04-23
    • 2014-03-19
    • 2021-06-29
    相关资源
    最近更新 更多