Sidekiq 工作人员正在泄漏内存

Posted

技术标签:

【中文标题】Sidekiq 工作人员正在泄漏内存【英文标题】:Sidekiq worker is leaking memory 【发布时间】:2013-03-10 03:45:40 【问题描述】:

使用 sidekiq gem - 我有使用 IO.popen 运行进程(大存储库的 git-tf 克隆)并跟踪标准输出以检查克隆进度的 sidekiq 工作人员。

当我运行 worker 时,我看到 sidekiq 内存随着时间的推移变得越来越大,直到我得到内核 OOM 并且进程被终止。子进程(java 进程)只占用总内存的 5%。

如何调试/检查代码中的内存泄漏? sidekiq 内存是我的工作人员内存与 popen 进程的总和吗? 有谁知道如何解决它?

编辑 这是我的工人的代码 - https://gist.github.com/yosy/5227250

编辑 2 我在没有 sidekiq 的情况下运行了代码,并且没有内存泄漏。这对于 sidekiq 和 tfs 中的大型存储库来说有些奇怪

【问题讨论】:

【参考方案1】:

我没有找到sidekiq中内存泄漏的原因,但是我找到了一条从sidekiq中获取的方法。

我已经修改了 git-tf 以使服务器命令接受来自 redis 队列的命令,它从我的代码中消除了很多复杂性。

git-tf 的修改版本在这里: https://github.com/yosy/gittf

稍后我会在修复一些错误时添加有关 sever 命令的文档。

【讨论】:

以上是关于Sidekiq 工作人员正在泄漏内存的主要内容,如果未能解决你的问题,请参考以下文章

为 sidekiq 工作人员编写测试

工作中的 Sidekiq 重试计数

Zeromq 内存泄漏 (pyzmq)

QTcpSocket 在工作进程中连续写入。避免内存泄漏的最佳实践

调试 redis、rails 和 sidekiq

Elastic Beanstalk 上的 Sidekiq 进程 - Errno::ENOENT:没有这样的文件或目录 - getcwd