【发布时间】:2016-08-25 23:51:18
【问题描述】:
我的首要问题是,我怎样才能让 Puma 停止失败。但这实际上是由许多小问题组成的。我将对它们中的每一个进行编号并加粗,以尝试使这个问题可以回答。
我在一个 t2.nano 的 EC2 实例上托管 Rails 应用程序。诚然,这是一个非常小的盒子——但我不希望我的网站获得任何流量。我使用 Capistrano 和 Capistrano Puma 成功地配置了 Nginx 和 Puma 的所有内容。一切都很好,直到有一天我去我的网站看到了 Nginx 504 消息。
打开Nginx错误日志,发现无法连接Puma:
connect() to unix:/home/deploy/myapp/shared/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET / HTTP/1.0", upstream: "http://unix:/home/deploy/myapp/shared/tmp/sockets/puma.sock:/500.html", host: "myapp.com"
调试这个,我得知 Puma 已经停止运行。这就是 Nginx 无法连接到它的原因。我认为这里有两个问题:第一,彪马不应该停止奔跑。服务器很小,但没有流量。第二,当 Puma 确实失败时,它应该优雅地重新启动。但是,我现在只关注第一个问题。因为如果 Puma 不断地重新启动,有时它会以严厉的方式终止进程似乎是合理的。
为了调试它,我打开了 htop。果然,机器在没有任何可用内存的情况下运行。这是有道理的——我在一台微型机器上运行数据库、rails 应用程序、网络服务器和内存缓存。它不断耗尽内存并杀死 Puma。
我查看了使用 Capistrano 设置的 Puma 配置。在 config/deploy.rb 我有这些行--
set :puma_threads, [0, 8]
set :puma_workers, 0
我阅读了有关 puma_workers 和 puma_threads 的所有信息。我还了解到 Nginx 有自己的工人。 Puma 工艺非常昂贵。 Puma 的酷之处在于它是适当的多线程——所以独立的进程非常棒。听起来每个工作人员都有自己的一组线程——所以如果有 4 个工作人员和 8 个线程,那么将有 32 个进程。但就我而言,我想使用很少的内存。 2个过程对我来说听起来不错。 1。我对工作线程和线程的理解正确吗?
我更新了我的 config/deploy.rb 文件并部署了 0 个 puma_workers 和 min=0, max=2 个线程。
似乎 Nginx 的配置位于:/etc/nginx/nginx.conf。 Puma 的配置位于:/home/deploy/myapp/shared/puma.rb。我本来希望我在 config/deploy.rb 中的更新让 Capistano 编辑配置文件。不走运——我的最小、最大线程仍然设置为 0,8。 2。使用 Capistano 时尝试通过 config/deploy.rb 更新这些值是否正确?
另外——我打开了 nginx.conf 看到了worker_processes 4;。 3。是我安装 Nginx 时设置为四个还是 Capistano 设置了这个默认值?
我打开了 htop,果然我有很多 Puma 进程。因此,我手动编辑了我的配置文件并重新启动了 Puma 和 Nginx。
我将 Nginx 工作人员的数量从 4 个更改为 1 个。查看 htop,这很有效。我现在只有 1 个 Nginx 工作人员。然而,Nginx 工作线程从来都不是很昂贵(与 Puma 线程相比)。所以我认为这并不重要。
但是,仍然有超过 2 个 Puma 线程 - 有 6 个。在云雀中,我将最小线程数从 0 更改为 1 - 认为 0 不是一个可能的数字,所以它可能正在设置默认值.这将 Puma 进程数增加到 9。出于同样的原因,我还尝试将 puma_workers 数更改为 1,并且进程数增加了。 4。拥有 0 个线程和/或工作线程是什么意思?
然后我尝试手动终止其中一个 puma 进程 (sudo kill xxxxx),然后 所有 个 Puma 进程都死了。
5.我需要做什么才能只有 2 个 puma 进程?
如你所见,我对 Puma 的理解不是很好,Puma vs Nginx vs Capistano 之间的界限也不清楚。任何帮助是极大的赞赏。我无法找到有关此问题的大量资源。
【问题讨论】:
标签: nginx amazon-ec2 capistrano puma