GC を頻繁に実行しているため、GC に多くの時間を費やしています。Ruby はデフォルトで、大きなアプリではなく、小さなスクリプトに適した GC パラメータを設定します。次の環境パラメーターを設定してアプリを起動してみてください。
RUBY_HEAP_MIN_SLOTS=800000
RUBY_FREE_MIN=100000
RUBY_GC_MALLOC_LIMIT=79000000
これが行うことは、初期ヒープ割り当てサイズを増やし、GC 番号をパディングして、あまり頻繁に実行されないようにすることです。これにより、アプリが使用する RAM が少し増えますが、GC に費やされる時間が大幅に短縮されます。デフォルト設定では、リクエストごとに GC を複数回実行する可能性があります。理想的には、数回のリクエストごとに1回実行する必要があります(または、Unicornの OOB::GCなどのリクエスト間でさらに良い)。
これらは私のアプリの GC 設定です。アプリが適切な設定を見つけるのに最も適しているように、それらを上下に微調整する必要があります。GC をそれほど頻繁に実行せず、過度のメモリ使用量を持たない中間点を狙っています。ただし、これは各アプリに固有であるため、これらの正確な設定がどうあるべきかについて私が与えることができるボイラープレートのアドバイスはありません. デフォルト (10,000 スロット、1.8 倍の成長率) から増やすと、すぐに影響が出るはずです。現在の状況に最適なように、そこから上下に微調整できます。
これらのパラメーターの完全なまとめはこちら、詳細はこちらです。これらの投稿は REE 1.8.7 向けに書かれていますが、Ruby 1.9.2+ にも適用できます。
これらはかなり極端な数値であるため、必要以上に多くの RAM を割り当てる原因となっている何かをアプリで実行している可能性があります。熱心な割り当て。ただし、GC 環境変数は、どのような場合でも状況のトリアージに役立つはずです。