用上帝来杀人

Ric*_*ras 11 ruby ruby-on-rails god

我使用乘客服务我的软件.它产生了许多ruby进程.

有时这些红宝石中的一个变得臃肿,我希望它会死.

我希望将神用于那个意图.我的想法是监控所有这些红宝石,如果它消耗超过500MB的内存3个周期,上帝应该尝试优雅地杀死它.如果它活着超过5分钟,那么上帝不应该优雅地杀死它.

在我看来,上帝总是试图再次运行服务,因此它迫使我们提供启动命令.是否有可能只使用上帝来杀死不良的行为过程,并让乘客产生在必要时让他们恢复生活?

Cur*_*ind 4

你的问题的答案在于问题本身。你可以使用god gem杀死 ruby​​ 进程,god gem是 github 人员开发的 ruby​​ 进程监控框架。

基本上,它是如何工作的:

  1. 配置 god 来监视进程,它可以是 apache、passenger、mongrel 中的任何内容,也可以是执行长时间运行任务的简单文件。
  2. 在上帝的配置文件中设置条件,上帝将根据该条件执行一些预定义的代码。

这是一个简单的例子(取自文档)。将此视为文件长时间运行的进程,我们要监视其内存使用情况,我们可以称之为simple.rb

loop do
  puts 'Hello'
  sleep 1
end
Run Code Online (Sandbox Code Playgroud)

现在,我们安装godgem 并将其配置为以超级用户身份运行,以便它可以终止/生成进程,然后创建一个配置文件。示例(也取自文档):

God.watch do |w|
  w.name = "simple"
  w.start = "ruby /full/path/to/simple.rb"
  w.keepalive(:memory_max => 500.megabytes)
end
Run Code Online (Sandbox Code Playgroud)

在这里,你可能已经知道,如果进程内存使用量超过 500 MB,上帝就会重新启动它。如果您开始使用godgem 进行流程管理,以下一些资源可能会有所帮助:

现在,请记住所有配置god实际上都是合法的 ruby​​ 代码,这样您就可以发挥创意并做各种事情。

最后,如果您经常发现自己正在运行长时间运行的进程,我建议您尝试JRuby,由于 JVM 和比 MRI 更快,它对于长时间运行的进程效果更好