0

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

解決策を見つけようとして、実行できるいくつかの変更を思いつきました。しかし、どれがより良いものであり、いくつかのオプションが可能かどうかはわかりません.

  1. いくつかのクラスローダーがspectjによって処理されないようにする方法はありますか? この場合、それは jrubyclassloader になります(検索後に見つけたものから、これは不可能だと思います)
  2. jruby は何らかの方法で 1 つのクラスローダーのみを使用するように制限できますか?
  3. アスペクトによって織り込まれるクラスを再帰的に制限する (aop.xml で除外するのが正しいとは思わないが、各アスペクトに cflow の制限を個別に追加する)
4

2 に答える 2

0

aop.xml ファイルでの構成が適切であると確信しています。https://www.eclipse.org/aspectj/doc/next/devguide/ltw-configuration.htmlを参照してください。除外オプションを使用する必要があります。

ドキュメントの例:

        <weaver options="-verbose">
          <!-- Weave types that are within the javax.* or org.aspectj.*
               packages. Also weave all types in the foo package that do
               not have the @NoWeave annotation. -->
          <include within="javax.*"/>
          <include within="org.aspectj.*"/>
          <include within="(!@NoWeave foo.*) AND foo.*"/>

          <!-- Do not weave types within the "bar" pakage -->
          <exclude within="bar.*"/>

          <!-- Dump all types within the "somepack" package,
               both before are after they are woven,
               to the "./_ajdump" folder on disk (for diagnostic purposes) -->
          <dump within="somepack.*" />
        </weaver>
于 2013-03-28T13:25:17.843 に答える