Ruby on rails 1个CPU上的Ruby rack应用程序-我应该运行多少个进程?

Ruby on rails 1个CPU上的Ruby rack应用程序-我应该运行多少个进程?,ruby-on-rails,ruby,sinatra,rack,Ruby On Rails,Ruby,Sinatra,Rack,我对Ruby web应用程序(来自java)相当陌生。 我有一个VPS,有1个CPU和2GB的RAM,我想玩一些rails/sinatra的东西 我正在使用Ruby 2.1.0 MRI CPU的数量如何映射到我需要运行的web服务器进程的数量?我使用puma作为web服务器,并设置了默认线程(0,16)。但我注意到还有一个“workers”选项,它派生出另一个进程来更好地处理多个请求 我是否正确理解,对于这种设置(1个CPU),运行2个web服务器进程没有意义?唯一合理的设置是1个带线程的进程?

我对Ruby web应用程序(来自java)相当陌生。 我有一个VPS,有1个CPU和2GB的RAM,我想玩一些rails/sinatra的东西

我正在使用Ruby 2.1.0 MRI CPU的数量如何映射到我需要运行的web服务器进程的数量?我使用puma作为web服务器,并设置了默认线程(0,16)。但我注意到还有一个“workers”选项,它派生出另一个进程来更好地处理多个请求


我是否正确理解,对于这种设置(1个CPU),运行2个web服务器进程没有意义?唯一合理的设置是1个带线程的进程?

哦,现在这是一个相当大的问题

进程和线程的数量不一定与CPU的数量相关联。这更多的是可用内存的数量、并发请求的数量以及正在进行的“锁定”操作的数量

如果您将有阻止其他请求的长时间运行的请求,那么有额外的进程可以帮助实现这一点。您仍然可以使用单个CPU拥有多个进程

Ruby中有许多不同的服务器以不同的方式处理扩展,Unicorn、Puma和Thin就是其中的一些。搜索Unicorn vs Puma vs Thin可以找到一些关于这个主题的有用博客文章

这里有一对

还有一些关于Ruby中并发性的信息


TL:DR的答案是,这要看情况而定

谢谢。在过去的几天里,我读了几篇文章/比较等。我不完全了解进程的数量。我在Puma网站上读到:“在提供本机线程的ruby实现上,您应该调整这个数字以匹配可用的内核数量。”因此我理解,如果我有1个CPU,那么就没有必要分叉新的进程。我说的对吗?如果我理解正确的话,问题是如果我有IO操作(DB读取、文件读取、外部API调用),ruby会切换线程,并在一个线程等待IO时让另一个线程完成它的工作。因此,看起来典型的web应用程序应该只有1个工作线程(进程),但内部有一些线程(例如,Puma有16个线程)。还是我遗漏了什么?这里有另一篇关于性能的文章。与并发相关的问题是没有真正简单的答案。本文解释了一种“测试”并发请求的策略,但是在一天结束时,您确实需要根据负载下的单个用例进行调整。对于一个应用程序来说,什么可能会让另一个应用程序慢下来。关于DB组件,同样,这取决于!通过使用更多的DB连接,可以做一些事情来改善这一点。更多信息请参见此处-