USR2和退出信号后几秒钟(不应)倒下几秒钟(不应)



我有一个带有独角兽的非常基本的应用程序。Rails 5.1应用程序,仅回声/打印" Hello World"。对于测试,我给了4名工人。

unicorn.rb:

worker_processes 4
preload_app true
timeout 30
listen '127.0.0.1:3000', :tcp_nopush => true, :backlog => 4096
# Logging
...

现在,我将USR2信号发送到主处理。主处理成功收到了我的信号,并创建了另一个主人,然后将其标记为" old ",然后将pid写入 oldbin file

问题从这里开始。当我确保第二大主及其孩子创建时,我将QUIT发送到 master。问题正好在这里。当旧大师收到QUIT时,全新的大师和孩子都会掉落并重新创建。这使我的系统降低了几秒钟。

基本上,新大师自杀,然后重新创建。为什么?我在这里做错了什么?我认为这是零停机时间。我可以向您保证我有3-5秒的停机时间。

我检查了一下,旧大师用PID 5(例如((例如(创建了新的大师(例如6、7、8、9。,13,14。简单地表明,旧的和新的都退出了,re- re - 创建。

我不使用-D命令。我使用工头生成systemd文件,这就是外观:

[Unit]
PartOf=bp-web.target
[Service]
User=Pratha
WorkingDirectory=/var/www/app/releases/20170628140005
Environment=PORT=%i
ExecStart=/bin/bash -lc 'exec bundle exec unicorn -E production -c config/unicorn.rb'
Restart=always
StandardInput=null
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=%n
KillMode=mixed
TimeoutStopSec=5
  1. 我将Capistrano用于释放周期和部署。
  2. 如果我使用puma与线程(甚至16个工作者50个线程(,我会得到真正的"零停机时间"。

这是一种预期的行为:

主管要求独角兽流程不要进行守护。也将Sigusr2发送到独角兽会导致旧的主人死亡。由于 Substisord观看旧的主人这会导致其将应用程序视为已退出的,即使它正在使用新的流程ID运行。最后,主管将尝试重新启动该应用程序,并且由于新独角兽大师正在使用所有插座。

都在使用所有插座。

解决方案:

  1. 使用-D选项,并在没有SystemD/Substisord的情况下自己启动Unicorn Rails应用程序。然后USR2将起作用。
  2. 或将Unicornherder用于包装纸。这将为您完成工作。没有停机时间。

请参阅链接:Unicorn SystemD/Substisord&零停机时间= Unicornherder

最新更新