2013-03-27 45 views
0

要繪製到問題一點:
我們正在利用我們的網站,一個Liferay門戶解決方案,並添加一些功能和修復,我們使用的是門戶網站中的bug方面。它自己的方面的數量在啓動時不是問題,但它們有時會開始編織的類加載器的數量是。
Liferay使用JRuby對CSS文件執行SASS評估。每個處理得到的CSS文件都是自己的jruby類加載器(我對jruby的瞭解有限,所以我不知道它是否應該工作)。這導致如果大量css/jruby操作在同一時間得到執行,則內存可能會跳過1.5GB,並使JVM內存不足。如果JVM在最初跳轉後仍然存在,或者如果沒有同時處理多個文件,則內存使用會在一段時間後恢復正常。所以這個問題顯然是由編織過程造成的內存開銷引起的AspectJ的防止加載時織遞歸

在試圖找到解決方案時,我想出了一些可以完成的更改。但我不確定哪個更好,哪個更有可能。

  1. 有沒有辦法排除一些classloader被aspectj處理的問題。在這種情況下,這將是jrubyclassloader(從我發現搜索後,我認爲這是不可能的)
  2. jruby可以限制只使用1類加載器,因爲這將減少編織開銷,如果這意味着jruby只能做串行處理,那麼這不會是一個問題
  3. 遞歸限制通過aspectj獲得weaven的類(不要認爲在aop.xml中排除是要去的方法,而是要爲每個方面添加cflow限制個別)

回答

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="([email protected] 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> 
+0

從我從文檔不解的是,如果你有3類A調用B調用C和說A.內exlude然後調用從A到B不會但是從B到C的呼叫會。我想看到的是,在A被忽略之後,我可以向織布工說出任何東西,所以B&C都可以 – user1787834 2013-03-28 14:01:42

相關問題