2014-02-11 31 views
1

在jruby 1.7.4下運行rake assets:precompile時,我收到了PermGen空間錯誤。我試過增加MaxPermSize和turning on ClassUnloading,無濟於事。「PermGen space」正在運行資源:在jruby下預編譯

這種情況可靠地發生,無論是在Cloudbees m1大型實例上還是本地在我的macbook pro上。

$ MAVEN_OPTS='-XX:MaxPermSize=2048M -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -w' bundle exec rake dash:build RAILS_ENV=production --trace 
** Invoke environment (first_time) 
** Execute environment 
** Invoke dash:build (first_time) 
** Invoke dash:prebuild (first_time) 
** Execute dash:prebuild 
** Invoke assets:clean (first_time) 
** Execute assets:clean 
** Invoke assets:clean:all (first_time) 
** Invoke assets:environment (first_time) 
** Execute assets:environment 
** Invoke environment 
** Invoke tmp:cache:clear (first_time) 
** Execute tmp:cache:clear 
** Execute assets:clean:all 
rm -rf /Users/andrew/code/unified_dashboard/public/assets 
** Invoke assets:precompile:primary (first_time) 
** Invoke assets:environment 
** Invoke tmp:cache:clear 
** Execute assets:precompile:primary 
rake aborted! 
PermGen space 
org.jruby.java.proxies.JavaProxy.confirmCachedProxy(JavaProxy.java:503) 
org.jruby.java.proxies.JavaProxy.getSingletonClass(JavaProxy.java:495) 
org.jruby.RubyModule.extend_object(RubyModule.java:2008) 
org.jruby.RubyModule$INVOKER$i$1$0$extend_object.call(RubyModule$INVOKER$i$1$0$extend_object.gen) 
org.jruby.RubyClass.finvoke(RubyClass.java:741) 
org.jruby.runtime.Helpers.invoke(Helpers.java:477) 
org.jruby.RubyBasicObject.callMethod(RubyBasicObject.java:359) 
org.jruby.RubyBasicObject.extend(RubyBasicObject.java:2756) 
org.jruby.RubyKernel.extend(RubyKernel.java:2187) 
org.jruby.RubyKernel$INVOKER$s$0$0$extend.call(RubyKernel$INVOKER$s$0$0$extend.gen) 
org.jruby.internal.runtime.methods.JavaMethod$JavaMethodN.call(JavaMethod.java:662) 
org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:205) 
org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:168) 
org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57) 
org.jruby.ast.IfNode.interpret(IfNode.java:118) 
org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105) 
org.jruby.ast.BlockNode.interpret(BlockNode.java:71) 
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74) 
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:225) 
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:202) 
org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:202) 
org.jruby.ast.FCallTwoArgNode.interpret(FCallTwoArgNode.java:38) 
org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105) 
org.jruby.ast.BlockNode.interpret(BlockNode.java:71) 
org.jruby.ast.BlockNode.interpret(BlockNode.java:71) 
org.jruby.ast.RescueBodyNode.interpret(RescueBodyNode.java:108) 
org.jruby.ast.RescueNode.handleJavaException(RescueNode.java:205) 
org.jruby.ast.RescueNode.interpret(RescueNode.java:138) 
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74) 
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:225) 
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:202) 
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:346) 

據我所知,該項目對其資產沒有任何異常。我對Java或Jruby不是很熟悉(當維護人員退出時,我繼承了這個項目),所以我沒有足夠的想法來進行調查。我一定會感謝一些幫助!

回答

3

您正在設置MAVEN_OPTS,但您沒有執行Maven,因此沒有關注該環境變量。您最終嘗試設置JVM選項,並且最簡單的方法是通過JRUBY_OPTS

$ JRUBY_OPTS='-J-XX:MaxPermSize=1G' ruby -e 'puts java.lang.management.ManagementFactory.getMemoryPoolMXBeans.map {|p| "#{p.name}: #{p.usage.max}"}' 
PS Perm Gen: 1073741824 

$ JRUBY_OPTS='-J-XX:MaxPermSize=2G' ruby -e 'puts java.lang.management.ManagementFactory.getMemoryPoolMXBeans.map {|p| "#{p.name}: #{p.usage.max}"}' 
PS Perm Gen: 2147483648 
相關問題