web-dev-qa-db-ja.com

ユニコーン:使用するワーカープロセスの数はいくつですか?

1GBのRAMを上限とする仮想LinuxサーバーでRuby on Railsアプリを実行しています。現在、常に制限に達しており、メモリ使用率を最適化します。私が検討しているオプションの1つは、Unicornワーカーの数を減らすことです。

では、使用するユニコーンワーカーの数を決定する最良の方法は何ですか?

現在の設定は10ワーカーですが、Google Analytics Real-Timeで確認した1秒あたりの最大リクエスト数は3です(ピーク時に1回だけスコアリングされ、99%の時間で1秒あたり1リクエストを超えません)。

それで、私が-今のところ-4人の労働者と一緒に行き、予想外の量の要求のための余地を残すことができるというのはセーブの仮定ですか? ワーカーの数を決定するために確認する必要があるメトリックと、Ubuntuマシンでそのために使用できるツールは何ですか?

28
emrass

使用する必要のあるワーカーの数は、アプリ自体が実行していることと、それらの処理を実行する頻度によって大きく異なります。残念ながら、すべてのテストケースで機能する完全な比率式は実際にはありません。これは、サーバーをオンに保つ必要があるRAMの有限量があるという事実を考慮すると、さらに当てはまります。

多くの人がCPUコア数+1を提案しますが、それも正しくありません。さまざまな量の労働者がいるテストケースを実行し、状況を確認する必要があります。定期的にログを確認してください。

私たちのチームでは、Nagiosというプログラムを使用しています: http://www.nagios.org

それはうまく機能し、起こっている可能性のある多くの異なることについてサーバーをチェックし、それらに警告することさえできます。これは、完璧なバランスを見つけようとするときに大いに役立ちます。

また、単にRailsインスタンスを実行するだけでなく、サーバーが実行していることもあります。スクリプトを実行したり、不要な情報を処理したりする場合があります。サーバーが実行されていないことを確認してください。実行する必要のないことを実行することで、多くのCPUサイクルを節約し、RAM)を可能な限り節約できます。

また、Unicornが持っているこの機能を実装していることを確認してください。私たちはプロジェクトで行っており、非常に貴重です。

メモリの増加ワーカーがメモリを使いすぎている場合、神または監視者はそれにQUIT信号を送信できます。これは、現在のリクエストを完了した後にワーカーに死ぬように指示します。労働者が死ぬとすぐに、マスターは即座に要求に応えることができる新しいものをフォークします。このようにして、リクエストの途中で接続を切断したり、起動時のペナルティを科したりする必要はありません。 -取得元: https://github.com/blog/517-Unicorn

私はまたあなたにいくつかの洞察を与えることができるこの同様の質問を見つけました:

https://serverfault.com/q/369811/110682

それがお役に立てば幸いです。

43
de_an777