Heroku 上有两个实例 运行,但只有 1 个工作人员。为什么?

Two instances running on Heroku but only 1 worker. Why?

我一直在解决 Unicorn 上 Heroku Rails-app 运行ning 上大约 550 Mb 的内存使用问题,这导致大约 2k ms 的响应时间。

我查看了我的 New Relic-graphs 并意识到我正在 运行ning 两个实例,但我只有 1 个工人,而且我只有 运行ning 1 dyno(业余爱好)。我不明白为什么有两个实例!好像我不小心使用了 "ghost" 实例。这只发生在我使用 Unicorn 时,而不是在 Puma 上。

编辑:我添加了一个工人,看看如果我 运行 2 个工人会发生什么。根据 New Relic,这导致 3 个实例 运行ning,因此它不会复制,只是添加一个幽灵实例。

我每 10 分钟一次 运行 一个简短的计划任务,可以在图中看到。 ENV["WEB_CONCURRENCY"] 未设置,顺便说一下。

# Unicorn.rb:
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 1)
timeout 15
preload_app true

before_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end  

after_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

# Proc
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

运行 heroku ps 给出:

heroku ps
=== web (Hobby): bundle exec unicorn -p $PORT -c ./config/unicorn.rb (1)
web.1: up 2018/01/12 11:34:08 +0100 (~ 5h ago)

这种行为是在预料之中还是我在这里做错了什么?什么会导致第二个实例 运行?是否有可能在启动时不小心在应用程序上启动两个版本?

我删除了调度程序、一些 gem 和 dalli 缓存,这也删除了 extra/ghost 实例。然后我把它们一个接一个地放回去,但它停留在一个实例中。 IE。之前有两个实例的设置完全相同,现在减少到 1(这最有意义)。

内存消耗保持不变,所以我将其标记为 New Relic 错误。不幸的是。