2013-03-27 89 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