問題を少しスケッチするには:
Web サイトに liferay ポータル ソリューションを使用し、いくつかの機能を追加し、ポータル内で使用しているバグを修正します。それ自体のアスペクトの量は起動時に問題ではありませんが、時々織り始めるクラスローダーの量は問題です。
Liferay は JRuby を使用して CSS ファイルの SASS 評価を実行します。処理される各 CSS ファイルは、独自の jruby クラスローダーを取得します (jruby に関する私の知識は限られているため、それが機能する方法であるかどうかはわかりません)。これにより、多数の css/jruby アクションが同時に実行されると、メモリが 1.5GB ジャンプし、JVM がメモリ不足になる可能性があります。JVM がこの最初のジャンプに耐えた場合、または同時に処理されるファイルがそれほど多くない場合は、しばらくするとメモリ使用量が通常に戻ります。したがって、問題は明らかに製織プロセスからのメモリオーバーヘッドによって引き起こされます
解決策を見つけようとして、実行できるいくつかの変更を思いつきました。しかし、どれがより良いものであり、いくつかのオプションが可能かどうかはわかりません.
- いくつかのクラスローダーがspectjによって処理されないようにする方法はありますか? この場合、それは jrubyclassloader になります(検索後に見つけたものから、これは不可能だと思います)
- jruby は何らかの方法で 1 つのクラスローダーのみを使用するように制限できますか?
- アスペクトによって織り込まれるクラスを再帰的に制限する (aop.xml で除外するのが正しいとは思わないが、各アスペクトに cflow の制限を個別に追加する)