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