29

1GBのRAMを上限とする仮想LinuxサーバーでRubyonRailsアプリを実行しています。現在、私は常に限界に達しており、メモリ使用率を最適化したいと考えています。私が見ているオプションの1つは、ユニコーンワーカーの数を減らすことです。

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

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

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

4

1 に答える 1

44

使用する必要のあるワーカーの数は、アプリ自体が実行していることと、アプリがそれらのことを実行している頻度によって大きく異なります。残念ながら、すべてのテストケースで機能する完全な比率式はありません。これは、サーバーをオンにしておく必要のある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

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

于 2012-06-16T22:32:36.267 に答える