首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中使用workling处理45k的数据库记录,而不会影响服务器性能

在rails中使用workling处理45k的数据库记录,而不会影响服务器性能
EN

Stack Overflow用户
提问于 2011-01-27 05:08:44
回答 2查看 277关注 0票数 1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-27 05:17:50

使用nice修改进程优先级是一种方法,但另一种方法是使用sleepselect命令告诉您的应用程序稍微放松一下:

代码语言:javascript
复制
while (doing_stuff)
  do_stuff

  # Take a break for 0.2 seconds
  select(nil, nil, nil, 0.2)
end

select调用将阻塞一段时间,允许系统上的其他任务自由运行。该值设置得越高,作业的运行速度就越慢,但对CPU负载级别的影响就越小。

票数 0
EN

Stack Overflow用户

发布于 2011-01-27 05:14:23

我假设您是通过cron和script/runner调用该作业的。您可以尝试使用nice降低进程的优先级

代码语言:javascript
复制
nice -n 19 /usr/bin/ruby <path to your app>/script/runner <your script>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4810060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档