【问题标题】:Preventing delayed_job background jobs from consuming too much CPU on a single server防止delayed_job后台作业在单台服务器上消耗过多CPU
【发布时间】:2010-11-23 07:58:52
【问题描述】:

我的 Rails 应用程序有许多任务被卸载到后台进程中,例如调整图像大小和上传到 S3。我正在使用delayed_job 来管理这些进程。

这些过程,尤其是缩略图 PDF(使用 Ghostscript)和调整图像大小(使用 ImageMagick)是 CPU 密集型的,并且通常会消耗 100% 的 CPU 时间。由于这些作业与 Web 应用程序本身以及 DB 在同一 (RedHat Linux) 服务器上运行,因此它们可能导致我们的 Web 应用程序无响应。

一种解决方案是让另一台服务器仅运行后台作业。我想这将是最佳解决方案?但是,由于这不是我可以立即做的事情,我想知道是否有可能以某种方式使后台作业以较低的操作系统优先级运行,从而在工作中消耗更少的 CPU 周期?

想法表示赞赏。

【问题讨论】:

    标签: ruby-on-rails linux background delayed-job


    【解决方案1】:

    如果我没记错的话,delayed_job 使用将处理所有后台作业的工作进程。启动进程时应该可以轻松更改进程的操作系统调度优先级。

    所以而不是,例如:

    ruby script/delayed_job -e production -n 2 start
    

    尝试:

    nice -n 15 ruby script/delayed_job -e production -n 2 start
    

    【讨论】:

    • 如果有人可以使用带 Capistrano 的delayed_job_args 解决此问题,则可获得奖励积分。
    • 它没有使用delayed_job_args,但这可以完成工作:stackoverflow.com/a/9928720/359957
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2016-10-28
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多