2

スワップ スペースが構成されていない仮想サーバーで、apache+passenger を使用して Rails アプリケーションを実行しています。

サイトは、毎日 20 万件以上のリクエストでかなりの量のトラフィックを取得し、システム全体でメモリが不足し、システム全体で奇妙な動作が発生することがあります。

問題は、メモリが不足しないように apache またはパッセンジャーを構成する方法があるかということです (たとえば、300M 以上のメモリを使用し始めたときにパッセンジャー インスタンスを適切に再起動するなど)。

サーバーには 4GB のメモリがあり、現在、パッセンジャーの PassengerMaxRequests オプションを使用していますが、ここでは最も確実なソリューションではないようです。

現時点では、nginx に切り替えることもできないため、スペースを確保するためのオプションではありません。

私がおそらく見逃している賢いアイデアは大歓迎です。

編集:私の一時的な解決策

Rails インスタンスが一定量のメモリ使用量を超えたときに、Rails インスタンスを再起動することはしませんでした。Engine Yard は、 ActiveRecord のメモリ膨張の問題について素晴らしいブログ記事を書きました。これは、この件に関する私たちの主な容疑者です。アプリケーションを最適化する時間があまりなかったので、PassengerMaxRequests を 300 に設定し、サーバーに 2GB のメモリを追加しました。それ以来、状況は良好です。最初は Rails インスタンスを連続して再起動すると遅くなるのではと心配していましたが、心配するほどの影響はないようです。

4

4 に答える 4

1

これらのプロセスを強制終了することを「制限」することを意味し、これがサーバー上の唯一のアプリケーションであり、Linuxである場合、2つの選択肢があります。

1つのプロセスが持つことができるメモリの最大量を設定します。

# ulimit -m
unlimited

または、同様の動作のためにcgroupsを使用します。

http://en.wikipedia.org/wiki/Cgroups

于 2012-01-19T15:29:58.857 に答える
0

定型的な解決策はありませんが、Passenger に同梱されている 2 つのコマンドを使用して、メモリ使用量とプロセス数を追跡することを 勧め passenger-statusますsudo passenger-memory-stats

于 2010-01-07T07:49:30.113 に答える
0

「メモリ制限」を超えたインスタンスを (可能であれば) 再起動しないことをお勧めします。これは、システムが無限ループに陥り、プロセスがその制限に繰り返し達して再起動する可能性があるためです。

おそらく、プロセスを常に監視し、一定量のメモリを超えるプロセスを強制終了する単純なデーモンを作成できます。これを行ったプロセスに関する情報を必ずログに記録して、問題が発生したときにいつでも問題を修正できるようにしてください。

また、そこに実際のスワップスペースを確保することも検討します...これは悪いハックのようです。

于 2009-09-21T19:30:29.150 に答える
0

パッセンジャー プロセスが制御不能になり、大量のメモリを消費するという問題があります。私は次のスクリプトを作成しました。これは、実際の解決策http://www.codeotaku.com/blog/2012-06/passenger-memory-check/indexを見つけるまで、物事を制御するのに役立っています。役に立つかもしれません。

Passenger Web インスタンスには重要な状態 (一般的に言えば) が含まれていないため、それらを強制終了することは通常はプロセスではなく、必要に応じて Passenger がインスタンスを再起動します。

于 2012-06-14T07:54:10.723 に答える