0

Tomcat の下で jruby/rails アプリを実行していますが、使用しているコンポーネントの一部が原因で、すぐにスレッドセーフに移行できません。当面の間、perm-gen のメモリ不足エラーを防ぐためにjruby.runtime.minjruby.runtime.maxを設定する予定です。残念ながら、これは同時ユーザーの数をかなり少数に抑えるので、私の質問はランタイムがいつリサイクルされるのかということです? それはセッションベースですか、それとも何か他のものですか。セッションタイムアウトを下げると、プールの可用性が向上するか、それ以上の効果があります。jruby ランタイムがどのように機能するかの詳細をよりよく理解するためのリンクをいただければ幸いです。

4

1 に答える 1

-1

まず第一に、q には少し混乱があります - 最小/最大実行時パラメータを設定しても perm-gen エラーを防ぐことはできません...おそらくメモリを少し増やす必要があります (アプリケーションのフットプリントに応じて)。特に。最小/最大値を高く設定している場合。

第二に-それは確かに同時実行を抑制しますが、それほど多くはありません-雑種(薄い)クラスターと考えてください:処理される同時要求>=実行中のインスタンスの数

単一のリクエストの間、単一のランタイムがブロックされます (セッション状態にはまったく依存しません)。応答が返された後、ランタイムはプールに返され、別のリクエストを処理する準備が整います。リクエストが来て、プールにランタイムがない場合、HTTP エラーを返す前に、利用可能になるまで待機しようとします ( jruby.runtime.acquire.timeoutを使用して構成できます)。

必要に応じてランタイムを起動するとコストがかかる可能性があるため(これもアプリケーションに依存します)、同時に実行するか、少なくともmin = maxで(統合)テストを実行することをお勧めします。サービス提供中のオンデマンドの Rails インスタンス。アプリケーションはデプロイの最小時間でロードする必要があるため、起動に時間がかかる場合があることに注意してください。

于 2013-08-12T07:33:02.213 に答える