【问题标题】:Sidekiq terminated when high memory usage during generating watermark in server在服务器中生成水印期间内存使用量高时 Sidekiq 终止
【发布时间】:2015-09-09 12:23:18
【问题描述】:

我正在使用一台在 4gb 内存上运行的服务器...

每张上传的图片都会有水印,所以我决定放入后台处理。但是,当上传图片的请求很多时,服务器会面临内存过高的问题,并且内存不会自行释放。

我的问题: - 为什么sidekiq worker 终止? - rmagick 是内存泄漏吗? - 如何处理这种情况?

【问题讨论】:

    标签: ruby-on-rails memory-management memory-leaks sidekiq rmagick


    【解决方案1】:

    您提供的详细信息远不及我们为您提供明智建议所需的详细信息,但我会尝试一些一般性的问题:您运行了多少 Sidekiq 工作人员?考虑减少 #,然后将大量请求排队以模拟重负载;继续这样做,直到您没有足够的工人,Sidekiq 可以舒适地处理最严重的负载。 (或者直到您确认即使只有 1 个 Sidekiq 工作人员也出现相同的问题!)

    一旦你这样做了,你就会对问题的轮廓有更好的感觉:当你的服务器过载时看起来像 Rmagick 内存泄漏问题,可能看起来不同(或者给你更多关于如何解决)当你减少工作量时。

    还可以查看this similar SO question 关于 Rmagick 和内存泄漏的信息;强制垃圾收集以限制任何给定泄漏可能造成的损害可能是值得的。

    【讨论】:

    • 感谢您的建议@topher-hunt..我将并发减少到 10 个,并注意内存,似乎它不再过度使用了。我可以知道如何在开始处理水印时强制 GC 吗?只做'GC.start'?
    • 嗯,我在水印处理之前尝试过 GC.start,它没有任何效果,内存仍然缓慢上升
    • 我预计使用 GC.start 有所帮助,但无论哪种方式,至少现在您知道有关内存问题的更多细节。 (根据我的经验,它们非常容易被误解。)当你说你在水印过程的开始时做了GC.start,那么在结束期间或结束时呢?水印流程?你试过吗?
    • 我已经通读了this related answer,并且,就此而言,整个页面。听起来您可能无法从 Ruby 内部解决核心问题,因为内存泄漏可能发生在 Ruby 外部的进程中。
    • 嗯,在水印过程结束时还没有尝试,但会做......是的,也许它在 rmagick 使用的 Ruby 之外。但是我看到做 GC.start 是一个相当繁重的过程,建议这样做吗?
    猜你喜欢
    • 2015-10-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    相关资源
    最近更新 更多