gpt4 book ai didi

ruby-on-rails - 只用上帝来杀人

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:28 26 4
gpt4 key购买 nike

我使用 passenger 服务我的软件。它产生许多 ruby 进程。

有时其中一颗 ruby 会变得肿胀,我希望它死掉。

我希望用上帝来达到这个目的。我的想法是监控所有这些 ruby ,如果它在 3 个周期内消耗超过 500MB 的内存,上帝应该尝试优雅地杀死它。如果它还活着超过 5 分钟,那么上帝应该不会优雅地杀死它。

在我看来,上帝总是试图再次运行该服务,因此它迫使我们提供启动命令。是否可以只使用 god 来杀死不良行为的进程,并让 passenger spawner 在必要时将它们带回来?

最佳答案

您问题的答案在于问题本身。您可以使用 god gem 终止 ruby 进程这是 github 家伙的 ruby​​ 进程进程监控框架。

基本上,这是它的工作原理:

  1. 配置 god 以监控进程,它可以是任何东西,从 apache、passenger、mongrel 或只是执行长时间运行任务的简单文件。
  2. 在上帝的配置文件中设置条件,上帝将根据这些条件执行一些预定义的代码。

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

loop do
puts 'Hello'
sleep 1
end

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

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

在这里,您可能已经想到,如果进程内存使用量超过 500 兆字节,上帝会重新启动它。如果您开始使用 god gem 进行流程管理,这里有一些可能有用的资源:

现在,请记住 godALL 配置实际上是合法的 ruby​​ 代码,因此您可以发挥创意并做各种事情。

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

关于ruby-on-rails - 只用上帝来杀人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11058139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com