【问题标题】:How could a Ruby process put limit to its CPU usage?Ruby 进程如何限制其 CPU 使用率?
【发布时间】:2011-05-15 14:13:30
【问题描述】:

假设我希望 Ruby 进程使用的 CPU 不超过 15%。是否可以?怎么样?

【问题讨论】:

  • 这是由操作系统处理的,例如 unix 上的 ulimit。这个问题属于服务器故障
  • @DGM,我同意通常这最好通过使用操作系统来解决,但我不同意这是题外话。 SO 主题是与编程相关的特定问题,包括常用的工具。我认为这个问题已经过去了,尤其是考虑到@mu 的回答太短了。

标签: ruby performance


【解决方案1】:

您可以尝试使用标准内核中的Process.setrlimit

设置进程的资源限制。

这看起来只是 C 库中 setrlimit 的包装,因此它可能仅适用于 Unix-ish 平台。 setrlimit 不支持 CPU 百分比限制,但支持以秒为单位限制 CPU 时间。

如果您只是想让您的 Ruby 进程不占用整个 CPU,那么您可以尝试使用 Process.setpriority 调整其优先级,这只是 libc 的 setpriority 的包装,并提供了对进程调度优先级的一些控制。同样,可用性可能会受到您的平台的限制,但它应该可以在 Linux、OSX 或任何其他 Unix-ish 系统上运行。

【讨论】:

  • 不幸的是 Process.setpriority() 函数在 windows 上没有实现:|
  • @rogerdpack:我对 Windows 了解不够,不知道该做什么。大概在 Windows 中有一个类似的 API,您可以将其包装在 C-to-Ruby 或其他东西的薄层中,甚至可能有一个通用的 Windows gem 可以帮助您访问 Windows 用于进程管理和限制的任何 API。
  • @rogerdpack:也许win32utils.rubyforge.org 中的某些内容会有所帮助,但我对 Windows 的了解还不够多。
  • 很好,或者可能是 FFI 或一些奇怪的,感谢您的提示 @muistooshort
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2012-07-06
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多