【发布时间】:2017-12-01 23:28:48
【问题描述】:
我有一个非常基本的独角兽应用。简单地回显/打印“Hello World”的 Rails 5.1 应用程序。对于测试,我给了 4 名工人。
独角兽.rb:
worker_processes 4
preload_app true
timeout 30
listen '127.0.0.1:3000', :tcp_nopush => true, :backlog => 4096
# Logging
...
现在,我向主进程发送USR2 信号。主进程成功接收到我的信号并创建了另一个主进程,然后将其标记为“旧”并将 PID 写入oldbin 文件
问题从这里开始。当我确定创建了第二个主人和他们的孩子时,我将QUIT 发送给 old 主人。问题就在这里。当老主人收到QUIT时,整个新老主人和孩子都掉了下来,重新创造了。这会使我的系统停机几秒钟。
基本上,新主人杀死自己然后重新创建。为什么?我在这里做错了什么?我认为这是零停机时间。我可以向你保证,我有 3-5 秒的停机时间。
我检查过,旧主人创建了 PID 为 5 的新主人(例如),他们的孩子为 6、7、8、9。当我从旧主人退出时,新主人变成 10,工人变成 11,12 ,13,14。只是表明旧的和新的都退出并重新重新-创建。
我不使用-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
- 我使用 capistrano 进行发布周期和部署。
- 如果我将 puma 与线程一起使用(甚至 16 个工作线程 50 个线程),我将获得真正的“零停机时间”。
【问题讨论】:
标签: ruby capistrano unicorn