在我的 rails 应用程序中,我使用工作进程每 6 小时扫描一次 45k 数据库记录,并在满足特定条件时发送邮件。这会导致服务器 CPU/负载在工作人员处理时达到峰值。因此,其他服务器请求会受到性能影响。我尝试使用 find_in_batch 一次检索 1000 条记录并进行处理。但 CPU 利用率仍处于峰值水平。我看不出有什么大的区别。有没有办法处理这个问题,所以 CPU 利用率没有达到最大限制?
问问题
278 次
2 回答
3
我假设您正在通过 cron 和script/runner
. 您可以尝试降低进程的优先级nice
:
nice -n 19 /usr/bin/ruby <path to your app>/script/runner <your script>
于 2011-01-26T21:14:23.197 回答
0
摆弄进程优先级 usingnice
是一种方法,但另一种方法是让您的应用不时放松一下,然后使用sleep
orselect
命令:
while (doing_stuff)
do_stuff
# Take a break for 0.2 seconds
select(nil, nil, nil, 0.2)
end
该select
调用将阻塞一小段时间,允许系统上的其他任务自由运行。您将此值设置得越高,您的作业运行速度就越慢,但对 CPU 负载级别的影响就越小。
于 2011-01-26T21:17:50.100 回答