频繁的类加载导致tomub连接器线程在JRuby Web应用程序中等待

时间:2015-08-09 13:22:22

标签: java tomcat jruby

我们的团队有一个使用JRuby开发的Web应用程序,并在Tomcat 7.0.42 + Oracle JVM 1.8.0.51上运行。应用程序有一个主包装器servlet,servlet充当代理,将请求路由到处理它们的JRuby脚本

现在我们遇到了一个并发问题,即Tomcat连接器执行线程正在等待,并且只有1-2个线程在大多数时间都在工作。下面是本机线程堆栈显示问题线程正在等待的内容:

----------------- 67 -----------------
0x00007f579d5c85bc      __pthread_cond_wait + 0xcc
0x00007f579c711028      _ZN7Monitor5ILockEP6Thread + 0x228
0x00007f579c71119f      _ZN7Monitor4lockEP6Thread + 0x10f
0x00007f579c86a57a      _ZN16SystemDictionary30resolve_instance_class_or_nullEP6Symbol6HandleS2_P6Thread + 0x86a
0x00007f579c86ac58      _ZN16SystemDictionary21resolve_super_or_failEP6SymbolS1_6HandleS2_bP6Thread + 0x2d8
0x00007f579c2a10c7      _ZN15ClassFileParser14parseClassFileEP6SymbolP15ClassLoaderData6Handle11KlassHandleP13GrowableArrayIS4_ER13TempNewSymbolbP6Thread + 0xfd7
0x00007f579c8661ef      _ZN16SystemDictionary19resolve_from_streamEP6Symbol6HandleS2_P15ClassFileStreambP6Thread + 0x17f
0x00007f579c547b0e      _ZL23jvm_define_class_commonP7JNIEnv_PKcP8_jobjectPKaiS4_S2_hP6Thread + 0x2ae
0x00007f579c54ceb1      JVM_DefineClassWithSource + 0xe1
0x00007f579b58eb45      Java_java_lang_ClassLoader_defineClass1 + 0x155
0x00007f57854db64b      <Unknown compiled code>

----------------- 111 -----------------
0x00007f579d5c85bc      __pthread_cond_wait + 0xcc
0x00007f579c711028      _ZN7Monitor5ILockEP6Thread + 0x228
0x00007f579c71119f      _ZN7Monitor4lockEP6Thread + 0x10f
0x00007f579c865aab      _ZN16SystemDictionary21define_instance_classE19instanceKlassHandleP6Thread + 0x34b
0x00007f579c866396      _ZN16SystemDictionary19resolve_from_streamEP6Symbol6HandleS2_P15ClassFileStreambP6Thread + 0x326
0x00007f579c547b0e      _ZL23jvm_define_class_commonP7JNIEnv_PKcP8_jobjectPKaiS4_S2_hP6Thread + 0x2ae
0x00007f579c54ceb1      JVM_DefineClassWithSource + 0xe1
0x00007f579b58eb45      Java_java_lang_ClassLoader_defineClass1 + 0x155
0x00007f57854db64b      <Unknown compiled code>

深入研究JVM代码后,我们找到了一些线索: 每次执行JRuby脚本时,它都会被解释并转换为类。要加载此类,将调用JVM JNI本机接口ClassLoader.defineClass1。 JVM的本机逻辑在定义类或动态调用方法(逻辑到JVM SystemDictionary cpp类)时需要独占锁定。

因此,我们正在考虑任何方法来缓解此性能问题,有没有什么方法可以调整JRuby以便它不会加载/卸载已翻译的Class对象?或者可以建议任何其他调整方法?

谢谢!

更新Tomcat执行程序线程java堆栈:

"http-bio-8080-exec-23" #212 daemon prio=5 os_prio=0 tid=0x00007f0680004800 nid=0x1a16 runnable [0x00007f0669ebf000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at org.jruby.util.JRubyClassLoader.defineClass(JRubyClassLoader.java:173)
    at org.jruby.internal.runtime.methods.InvocationMethodFactory.endClassWithBytes(InvocationMethodFactory.java:1459)
    at org.jruby.internal.runtime.methods.InvocationMethodFactory.endCallWithBytes(InvocationMethodFactory.java:1443)
    at org.jruby.internal.runtime.methods.InvocationMethodFactory.getCompiledMethod(InvocationMethodFactory.java:282)
    at org.jruby.runtime.Helpers.constructSingletonMethod(Helpers.java:2102)
    at org.jruby.runtime.Helpers.defs(Helpers.java:323)
    at rubyjit.Module$$extended_ae0875067076ab75e62753510e61fa82bf7d1b841680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/libs/calcengine/extrule.rb:80)
    at rubyjit.Module$$extended_ae0875067076ab75e62753510e61fa82bf7d1b841680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/libs/calcengine/extrule.rb)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:181)
    at org.jruby.RubyClass.finvoke(RubyClass.java:742)
    at org.jruby.runtime.Helpers.invoke(Helpers.java:503)
    at org.jruby.RubyBasicObject.callMethod(RubyBasicObject.java:363)
    at org.jruby.RubyBasicObject.extend(RubyBasicObject.java:2559)
    at org.jruby.RubyKernel.extend(RubyKernel.java:2213)
    at org.jruby.RubyKernel$INVOKER$s$0$0$extend.call(RubyKernel$INVOKER$s$0$0$extend.gen)
    at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodN.call(JavaMethod.java:665)
    at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:206)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:168)
    at rubyjit.Module$$pickrules4Order_c2ca99d7f8cf0e55c79920f16524fb2bc5fa6e261680052247.block_0$RUBY$__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/libs/extservice/rulepickservice.rb:31)
    at rubyjit$Module$$pickrules4Order_c2ca99d7f8cf0e55c79920f16524fb2bc5fa6e261680052247$block_0$RUBY$__file__.call(rubyjit$Module$$pickrules4Order_c2ca99d7f8cf0e55c79920f16524fb2bc5fa6e261680052247$block_0$RUBY$__file__)
    at org.jruby.runtime.CompiledBlock19.yield(CompiledBlock19.java:159)
    at org.jruby.runtime.CompiledBlock19.yield(CompiledBlock19.java:145)
    at org.jruby.runtime.Block.yieldArray(Block.java:158)
    at org.jruby.RubyEnumerable$25.call(RubyEnumerable.java:848)
    at org.jruby.runtime.CallBlock.yieldSpecific(CallBlock.java:76)
    at org.jruby.runtime.Block.yieldSpecific(Block.java:120)
    at rubyjit.Mongoid::Contextual::Mongo$$yield_document_c96fb4ff211b64934be321fa3a44264a996eff891680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/mongoid-4.0.2/lib/mongoid/contextual/mongo.rb:658)
    at rubyjit.Mongoid::Contextual::Mongo$$yield_document_c96fb4ff211b64934be321fa3a44264a996eff891680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/mongoid-4.0.2/lib/mongoid/contextual/mongo.rb)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:201)
    at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:177)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:183)
    at rubyjit.Mongoid::Contextual::Mongo$$each_2fb7a025221ceabc57ed6ee46d5f9169720ef1bd1680052247.block_0$RUBY$__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/mongoid-4.0.2/lib/mongoid/contextual/mongo.rb:123)
    at rubyjit$Mongoid::Contextual::Mongo$$each_2fb7a025221ceabc57ed6ee46d5f9169720ef1bd1680052247$block_0$RUBY$__file__.call(rubyjit$Mongoid::Contextual::Mongo$$each_2fb7a025221ceabc57ed6ee46d5f9169720ef1bd1680052247$block_0$RUBY$__file__)
    at org.jruby.runtime.CompiledBlock19.yield(CompiledBlock19.java:135)
    at org.jruby.runtime.CompiledBlock19.yieldSpecific(CompiledBlock19.java:97)
    at org.jruby.runtime.Block.yieldSpecific(Block.java:120)
    at rubyjit.Moped::Cursor$$each_d5f9c42b1face54b312ef523ec7d172d14df4a341680052247.block_0$RUBY$__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/moped-2.0.6/lib/moped/cursor.rb:28)
    at rubyjit$Moped::Cursor$$each_d5f9c42b1face54b312ef523ec7d172d14df4a341680052247$block_0$RUBY$__file__.call(rubyjit$Moped::Cursor$$each_d5f9c42b1face54b312ef523ec7d172d14df4a341680052247$block_0$RUBY$__file__)
    at org.jruby.runtime.CompiledBlock19.yield(CompiledBlock19.java:135)
    at org.jruby.runtime.Block.yield(Block.java:142)
    at org.jruby.RubyArray.eachCommon(RubyArray.java:1606)
    at org.jruby.RubyArray.each(RubyArray.java:1613)
    at org.jruby.RubyArray$INVOKER$i$0$0$each.call(RubyArray$INVOKER$i$0$0$each.gen)
    at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:143)
    at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:154)
    at rubyjit.Moped::Cursor$$each_d5f9c42b1face54b312ef523ec7d172d14df4a341680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/moped-2.0.6/lib/moped/cursor.rb:28)
    at rubyjit.Moped::Cursor$$each_d5f9c42b1face54b312ef523ec7d172d14df4a341680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/moped-2.0.6/lib/moped/cursor.rb)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:161)
    at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:143)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:149)
    at org.jruby.runtime.callsite.CachingCallSite.callVarargs(CachingCallSite.java:112)
    at rubyjit.Moped::Query$$each_d665770547ce0f382a5745553bf408aff9fba0e91680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/moped-2.0.6/lib/moped/query.rb:78)
    at rubyjit.Moped::Query$$each_d665770547ce0f382a5745553bf408aff9fba0e91680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/moped-2.0.6/lib/moped/query.rb)
    at org.jruby.ast.executable.AbstractScript.__file__(AbstractScript.java:38)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:161)
    at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:143)
    at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:154)
    at rubyjit.Mongoid::Contextual::Mongo$$each_2fb7a025221ceabc57ed6ee46d5f9169720ef1bd1680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/mongoid-4.0.2/lib/mongoid/contextual/mongo.rb:122)
    at rubyjit.Mongoid::Contextual::Mongo$$each_2fb7a025221ceabc57ed6ee46d5f9169720ef1bd1680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/mongoid-4.0.2/lib/mongoid/contextual/mongo.rb)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:161)
    at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:143)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:149)
    at org.jruby.runtime.callsite.CachingCallSite.callVarargs(CachingCallSite.java:112)
    at rubyjit.Mongoid::Contextual$$each_11e66c3e8105d85d815e0ad727a63f9bcc751bba1680052247.chained_0_rescue_1$RUBY$SYNTHETIC__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/mongoid-4.0.2/lib/mongoid/contextual.rb:20)
    at rubyjit.Mongoid::Contextual$$each_11e66c3e8105d85d815e0ad727a63f9bcc751bba1680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/mongoid-4.0.2/lib/mongoid/contextual.rb)
    at rubyjit.Mongoid::Contextual$$each_11e66c3e8105d85d815e0ad727a63f9bcc751bba1680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/lib/promotionlibs.jar!/gems/mongoid-4.0.2/lib/mongoid/contextual.rb)
    at org.jruby.ast.executable.AbstractScript.__file__(AbstractScript.java:38)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:161)
    at org.jruby.RubyClass.finvoke(RubyClass.java:528)
    at org.jruby.runtime.Helpers.invoke(Helpers.java:484)
    at org.jruby.RubyEnumerable.callEach(RubyEnumerable.java:96)
    at org.jruby.RubyEnumerable.injectCommon(RubyEnumerable.java:844)
    at org.jruby.RubyEnumerable.inject(RubyEnumerable.java:865)
    at org.jruby.RubyEnumerable$INVOKER$s$inject.call(RubyEnumerable$INVOKER$s$inject.gen)
    at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:177)
    at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:188)
    at rubyjit.Module$$pickrules4Order_c2ca99d7f8cf0e55c79920f16524fb2bc5fa6e261680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/libs/extservice/rulepickservice.rb:30)
    at rubyjit.Module$$pickrules4Order_c2ca99d7f8cf0e55c79920f16524fb2bc5fa6e261680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/libs/extservice/rulepickservice.rb)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:141)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:134)
    at org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:60)
    at org.jruby.ast.InstAsgnNode.interpret(InstAsgnNode.java:95)
    at org.jruby.ast.OpAsgnOrNode.interpret(OpAsgnOrNode.java:102)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
    at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:139)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:187)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:306)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:136)
    at org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:60)
    at org.jruby.ast.CallNoArgBlockNode.interpret(CallNoArgBlockNode.java:60)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
    at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:182)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:203)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:326)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
    at org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
    at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:182)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:203)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:326)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
    at rubyjit.Module$$extended_a101d7e78a6d16d879f757b2f66326d7dc77a3641680052247.method__0$RUBY$calc(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/libs/calcengine/calcengine.rb:86)
    at rubyjit$Module$$extended_a101d7e78a6d16d879f757b2f66326d7dc77a3641680052247$method__0$RUBY$calc.call(rubyjit$Module$$extended_a101d7e78a6d16d879f757b2f66326d7dc77a3641680052247$method__0$RUBY$calc)
    at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:210)
    at org.jruby.internal.runtime.methods.CompiledMethod.call(CompiledMethod.java:263)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:326)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
    at rubyjit.Promotion::ExportService::CalcEngineService$$_calc_61bbcc14aeb853713fd02cfabafc5e9069431d631680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/libs/calcengine/calcengineservice.rb:82)
    at rubyjit.Promotion::ExportService::CalcEngineService$$_calc_61bbcc14aeb853713fd02cfabafc5e9069431d631680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/libs/calcengine/calcengineservice.rb)
    at org.jruby.ast.executable.AbstractScript.__file__(AbstractScript.java:46)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:221)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:202)
    at org.jruby.ast.FCallTwoArgNode.interpret(FCallTwoArgNode.java:38)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112)
    at org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:206)
    at org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:194)
    at org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:177)
    at org.jruby.runtime.Block.yieldArray(Block.java:158)
    at org.jruby.RubyBasicObject.yieldUnder(RubyBasicObject.java:1588)
    at org.jruby.RubyBasicObject.instance_exec19(RubyBasicObject.java:1562)
    at org.jruby.RubyBasicObject$INVOKER$i$0$3$instance_exec19.call(RubyBasicObject$INVOKER$i$0$3$instance_exec19.gen)
    at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:202)
    at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:143)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:149)
    at org.jruby.ast.CallNoArgBlockPassNode.interpret(CallNoArgBlockPassNode.java:53)
    at org.jruby.ast.MultipleAsgn19Node.interpret(MultipleAsgn19Node.java:104)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.ast.IfNode.interpret(IfNode.java:116)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.ast.RescueNode.executeBody(RescueNode.java:221)
    at org.jruby.ast.RescueNode.interpret(RescueNode.java:116)
    at org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112)
    at org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:206)
    at org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:194)
    at org.jruby.runtime.Interpreted19Block.call(Interpreted19Block.java:125)
    at org.jruby.runtime.Block.call(Block.java:101)
    at org.jruby.RubyProc.call(RubyProc.java:290)
    at org.jruby.internal.runtime.methods.ProcMethod.call(ProcMethod.java:64)
    at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:180)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:70)
    at org.jruby.ast.CallSpecialArgNode.interpret(CallSpecialArgNode.java:73)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112)
    at org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:206)
    at org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:194)
    at org.jruby.runtime.Interpreted19Block.call(Interpreted19Block.java:125)
    at org.jruby.runtime.Block.call(Block.java:101)
    at org.jruby.RubyProc.call(RubyProc.java:290)
    at org.jruby.internal.runtime.methods.ProcMethod.call(ProcMethod.java:64)
    at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:180)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:70)
    at org.jruby.runtime.callsite.CachingCallSite.callVarargs(CachingCallSite.java:106)
    at rubyjit.RubyCalcEngineService$$doPost_5d45f7976c9cb30a0905497450f9788c033264211680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/irubyservice.rb:62)
    at rubyjit.RubyCalcEngineService$$doPost_5d45f7976c9cb30a0905497450f9788c033264211680052247.__file__(/apps/tomcat7/webapps/calcengine/WEB-INF/classes/rubysrc/irubyservice.rb)
    at org.jruby.internal.runtime.methods.JittedMethod.call(JittedMethod.java:221)
    at org.jruby.RubyClass.finvoke(RubyClass.java:761)
    at org.jruby.runtime.Helpers.invoke(Helpers.java:506)
    at com.ibm.commerce.cbt.promotion.RubyCalcEngineService.doPost(RubyCalcEngineService.java:88)
    at com.ibm.commerce.cbt.promotion.CalcEngineWrapper.doPost(CalcEngineWrapper.java:44)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    - locked <0x00000000e6448d98> (a org.apache.tomcat.util.net.SocketWrapper)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
    - <0x0000000085b1b8a8> (a java.util.concurrent.ThreadPoolExecutor$Worker)

0 个答案:

没有答案