我的 Rails 应用程序有许多任务被卸载到后台进程中,例如调整图像大小和上传到 S3。我在用着延迟作业 http://github.com/collectiveidea/delayed_job/tree/master来管理这些流程。
这些过程,特别是缩略图 PDF(使用 Ghostscript)和调整图像大小(使用 ImageMagick),是 CPU 密集型过程,通常会消耗 100% CPU 时间。由于这些作业与 Web 应用程序本身以及数据库在同一台 (RedHat Linux) 服务器上运行,因此它们可能会导致我们的 Web 应用程序无响应。
一种解决方案是获取另一台服务器来仅运行后台作业。我想这将是最佳解决方案?但是,由于这不是我可以立即执行的操作,我想知道是否可以以某种方式使后台作业以较低的操作系统优先级运行,从而在完成工作时消耗更少的 CPU 周期?
思想赞赏。
如果我没错的话,delayed_job
使用工作进程来处理所有后台作业。当您启动进程时,应该可以轻松地更改进程的操作系统调度优先级。
因此,例如:
ruby script/delayed_job -e production -n 2 start
try:
nice -n 15 ruby script/delayed_job -e production -n 2 start
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)