情况:我正在使用 Rails + Unicorn,使用 Capistrano 进行部署。有时 Rails 应用程序无法在生产模式下启动(尽管它不是真正的生产,而是一个暂存环境)。这通常是由于部署脚本或配置中的错误(因此通常无法通过测试检测到)而发生。发生这种情况时,独角兽主进程会杀死失败的工作人员并生成一个新的工作人员,该工作人员也会失败,依此类推。在这段时间里,独角兽消耗了大量的 CPU 并使用相同的消息污染日志。
手动方式(不好):去你的主页看看是否有效。看看htop
。跟踪日志。手动杀死独角兽。缺点:容易忘记。日志被污染,CPU 在你反应的时候被加载。
另一种解决方案:使用独角兽的preload_app true
. 这将导致主进程快速失败。缺点:快乐场景中的内存消耗更高。
最佳实践: - ???
有什么方法可以巧妙地检测到独角兽大师无用地试图产生失败的孩子并阻止它?