2017-08-02 14 views
1

標準のJava構文を動的に実行するために、アプリケーションでJava BeanShellインタプリタ(v1.2 b7)を使用しています。Java Beanshellインタプリタの負荷が高い場合のロック競合

サンプルコード

bsh.Interpreter interpreter = new bsh.Interpreter(); 
interpreter.set("context", ctx); 
interpreter.set("transaction", transaction); 
interpreter.set("log", log); 
interpreter.eval(script); 

私たちは、複数のスレッドが同時に上記のコードを実行するとき、我々は、スレッドのロック競合を見ている高負荷の問題を抱えています。アプリケーションのパフォーマンスを低下させる待ち状態のスレッドが複数あります。ここで

が待っているのコールスタックトレースがあり、スレッドをブロック:

ウェイティングがコールスタックスレッド

java.util.Vector.addElement():619 
bsh.classpath.ClassManagerImpl.addListener():N/A 
bsh.BshClassManager.addCMListener():N/A 
bsh.NameSpace.<init>():N/A 
bsh.BlockNameSpace.<init>():N/A 
bsh.BSHBlock.eval():N/A 
bsh.BSHBlock.eval():N/A 
bsh.BSHWhileStatement.eval():N/A 
bsh.Interpreter.eval():N/A 
bsh.Interpreter.eval():N/A 
bsh.Interpreter.eval():N/A 

ブロックされたスレッドコールスタック

java.util.Vector.indexOf():408 
java.util.Vector.indexOf():382 
java.util.Vector.removeElement():641 
bsh.classpath.ClassManagerImpl.addListener():N/A 
bsh.BshClassManager.addCMListener():N/A 
bsh.NameSpace.<init>():N/A 
bsh.BshMethod.invokeDeclaredMethod():N/A 
bsh.Name.invokeLocalMethod():N/A 
bsh.Name.invokeMethod():N/A 
bsh.BSHMethodInvocation.eval():N/A 
bsh.BSHPrimaryExpression.eval():N/A 
bsh.Interpreter.eval():N/A 
bsh.Interpreter.eval():N/A 
bsh.Interpreter.eval():N/A 

私がチェックしました最新バージョンのソースコード(v2.0 b4)とそれにもsaがあるようです私は発行します。

私の質問は以下のとおりです。

  1. 誰もがこのような問題を経験していますか?はいの場合は、解決策を提案してください。
  2. 使用しているコードに問題はありますか?スレッドごとにbsh.Interpreterという別のインスタンスを作成することはお勧めしませんか?私たちが評価しているスクリプトは、別のスレッドでは異なることに注意してください。
  3. JavaのBeanShellインタプリタの代わりに、高負荷でうまく動作する方法はありますか?

答えて

1

ご覧のように、beanshellはリスナーオブジェクトのVectorを使用しています。

明らかにベクトルがその内部に「保護された上で」ですがBeanShellの1.3.0は、2003年8月にリリースされたvector

を参照して、2005年5月にバージョン2.0b4

最新の2.0b5 beanshellを確認するが、私ができgroovy

+0

groovyインタプリタに関連するメモリリークやロック競合の問題はありますか?私はgroovy通訳の問題について書かれたブログはほとんどないと思う。あなたはそれについて何か経験がありますか? https://stackoverflow.com/questions/36407119/groovyshell-in-java8-memory-leak-duplicated-classes-src-code-load-test-pr https://stackoverflow.com/questions/24169976/理解 - groovy-grails-classloader-leak https://www.linkedin.com/pulse/jmeter-tuning-jsr223-groovy-vs-java-beanshell-raw-nagendran – Aman

関連する問題