如何检查Rails应用程序的Puma线程安全性

Pah*_*iya 18 ruby multithreading ruby-on-rails heroku puma

我希望使用Puma webserver将我的Rails应用程序部署到Heroku.但是,我不确定所有Gems是否都是线程安全的.阅读所有宝石的源代码对我们来说不是一个可行的选择.

有没有办法自动检查所有Gems的线程安全性?或者,如果执行/检测到线程不安全的代码,Puma是否会抱怨/显示特定的错误日志?

hah*_*cho -4

线程安全一般无法检测。如果有某种方法可以自动检测它,您的编译器/解释器可能会警告您。 比赛条件,甚至很难重现。

取决于您的口译员:

  • CRubyGIL,所以使用Puma它是没有意义的。
  • 如果您正在使用JRuby或 ,Rubinius您可能会从中受益Puma,并且您使用的 gem 很可能已经记录了它们的方法/类线程安全性。在这种情况下,您所需要做的就是检查您的代码。

  • 很棒的文章:https://bearmetal.eu/theden/how-do-i-know-whether-my-rails-app-is-thread-safe-or-not/ (15认同)
  • 即使有了 GIL,使用多线程也有其优点。当然,您无法同时使用超过 1 个 CPU 来运行您的程序,但在网络或 IO 之后等待所花费的所有时间通常可用于在同一进程中执行其他操作。另外,您最终将使用更少的内存。例如,请参见 Sidekiq。 (11认同)
  • Unicorn 曾经存在并且可能仍然存在一个问题,它容易受到缓慢的客户端攻击(作为一种微不足道的 DoS 形式)。这就是 Heroku 现在建议使用 Puma 而不是 Unicorn 作为 Ruby Web 服务器的原因。 (2认同)