2016-04-29 10 views
0

Newrelicによると、Rack::Lock#callは約9秒かかります。Rack :: Lock#call too much time

スナップショット下記をご覧ください:

http://prntscr.com/ay7ccx

我々は2労働者、1〜6個の最大スレッド

  • nginxのでサーバ構成

    • のUbuntu 14.04 64ビット
    • プーマを以下していますフロントエンドとして
    • Rails 4とRuby 2
    • 7ギガバイトのRAMと4コアCPU

    なぜそれがミドルウェアでそんなに時間がかかることいずれかを助けることができますか?

  • 答えて

    0

    これは、レールのマルチスレッドモードがオフのように聞こえます。これはRack::Lockミドルウェアを追加します。ミドルウェアはミューテックスを使用して、各レールインスタンスが一度に1つの要求を処理するようにします。あなたが見ている数字は、これがリクエストをあなたのレールインスタンスの中でキューに入れていることを示しています。

    これはallow_concurency設定のコントローラです。デフォルトはfalseです。

    補足として、MRIはconcurency(あなたがCPUにバインドされている場合)が良くありません - より少ないスレッドでより多くのワーカーを実行する方が良いかもしれません。 jruby(GILを持たない)に切り替えることもできますが、それは明らかに大きな仕事です。

    +0

    私は 'allow_concurrency'をtrueにするとワーカーと6スレッドで十分でしょうか? – GBD

    +0

    これは、アプリケーションに依存し、負荷がかかっているかどうか、CPUにバインドされているかどうかによって異なります。 –