繁体   English   中英

如何限制乘客/ NGINX的ruby CPU使用率?

[英]How do I limit ruby's CPU usage for Passenger/NGINX?

我正在Nginx上为我的Ruby on Rails应用程序运行Passenger。

我的应用程序偶尔会运行一些非常密集的进程,从而使ruby最多将CPU占用率达到100%,同时一次最多处理30秒。

我希望能够限制我的红宝石进程可以访问的可用CPU。

乘客和NGINX的设置都很好,我只需要限制乘客/红宝石进程可以访问的可用CPU。

如果我可以将每个进程的速度设置为80%,那么密集型进程将花费更长的时间(最大为80%),但是我的总CPU不会最大为100%,而其他进程的CPU访问。

有Linux配置/应用程序可以做到这一点吗?

将我的后续评论转化为答案。 您可能可以使用Alexander提供的链接来限制CPU。

但是,这是一种不良的体系结构方法。 在Rails领域中,CPU密集型和长时间运行的任务通常在后台作业中完成。 此类任务的示例包括导出/处理大量数据,发送电子邮件,通过用户操作触发第三方API调用。

因此,我建议您建立一个后台作业系统。 例如,您可以使用Sidekiq。 开始“导出/处理大量数据”的请求只是使工作由工作进程拾取并完成的工作排队。 这样,您可以独立于Nginx / Passenger设置来扩展该工作进程(或一组)。 如果您需要为该进程分配更多或更少的CPU,则与您的Web层无关。 内存也一样。

如果您将此数据提供给浏览器或其他任何内容,则也可以选择。 您可以将此文件存储在S3上,并返回指向它的链接。 您可以将其本地存储在nginx可以访问的路径中,并通过再次提供链接来允许nginx将其用作任何其他文件。 如果需要30秒生成一个响应,您可以链接到用户钩了一个短暂的WebSocket,推动链接上传输的数据的电子邮件。

我希望您可以考虑使用这种方法来限制Web进程的CPU使用率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM