1

在我的 rails 应用程序中,我使用工作进程每 6 小时扫描一次 45k 数据库记录,并在满足特定条件时发送邮件。这会导致服务器 CPU/负载在工作人员处理时达到峰值。因此,其他服务器请求会受到性能影响。我尝试使用 find_in_batch 一次检索 1000 条记录并进行处理。但 CPU 利用率仍处于峰值水平。我看不出有什么大的区别。有没有办法处理这个问题,所以 CPU 利用率没有达到最大限制?

4

2 回答 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是一种方法,但另一种方法是让您的应用不时放松一下,然后使用sleeporselect命令:

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 回答