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

如何让TypeScript的Queue类无内存泄漏?Docker内存超限排查

关于TypeScript Queue类rawData数组是否会引发内存泄漏的疑问
export class Queue<T> {
    constructor(
        onNextItem: (data: T) => Promise<any>,
        onError: (error: Error) => void,
    ) {
        this.onNextItem = onNextItem
        this.onError = onError
    }

    private onNextItem: (data: T) => Promise<any>
    private onError: (error: Error) => void
    private rawData: T[] = []
    private isWorking = false

    addToQueue(request: T) {
        this.rawData.push(request)

        if (!this.isWorking) this.initiateHandling()
    }

    getLength(): number {
        return this.rawData.length
    }

    private initiateHandling() {
        if (this.rawData.length === 0) {
            this.isWorking = false
            return
        }
        this.isWorking = true

        const nextRequest = this.rawData.shift()

        this.onNextItem(nextRequest)
            .then(() => {
                this.initiateHandling()
            })
            .catch((err) => {
                this.onError(err)
            })
    }
}

我担忧上述Queue类中的rawData数组会引发内存泄漏:虽然我使用shift()移除元素,但onNextItem()执行耗时极短,数组大多为空,仅偶尔有短时间的addToQueue()调用。此外,运行该代码的Docker容器出现137错误(表示内存超限),这让我格外关注。请问我的担忧是否合理?


结论:你的担忧针对rawData数组本身并不合理,但需要排查其他可能导致内存超限的点

  • rawData不会引发内存泄漏:你在处理每个元素时都用shift()从数组头部移除了元素,这会让被移除的元素失去引用,最终会被JS垃圾回收机制清理。即使偶尔有批量添加,只要处理逻辑正常走完,数组里的元素都会被及时移除,不会持续占用内存。

  • Docker 137错误的其他可能原因:

    • onNextItem内部可能存在内存泄漏:比如该函数里创建了未被及时清理的对象、订阅事件后未取消、或者打开了资源(如文件、网络连接)未释放,这些都会持续占用内存。
    • 短时间批量添加的request对象本身过大:如果每个T类型的对象体积很大,短时间大量添加可能导致内存峰值超过Docker限制,即使后续被处理,峰值阶段也可能触发137错误。
    • 错误处理逻辑的问题:当前代码中如果onNextItem抛出错误,只会调用onError但不会继续处理队列剩余元素,这会导致rawData里未处理的元素一直留存,长此以往会占用内存。比如某次处理出错后,队列停止工作,后续添加的元素只会堆积在rawData里,最终撑爆内存。

建议排查方向

  • 检查onNextItem的实现,确认是否有未清理的资源或长期持有的引用。
  • 给onError逻辑加上继续处理队列的逻辑,比如在catch块里调用this.initiateHandling(),避免错误导致队列停滞、元素堆积。
  • 监控rawData的长度变化,如果出现持续增长的情况,说明队列处理逻辑有停滞问题。
  • 检查Docker容器的内存限制是否合理,是否需要根据实际业务调整。

内容的提问来源于stack exchange,提问作者Eric Goerens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:02:32