简体   繁体   English

beanshell-死锁问题

[英]beanshell - Deadlock issue

Has anyone got any experience of having deadlocks with beanshell? 有没有人有过使用beanshell造成死锁的经验? This is something we have been encountering recently in our production system where script execution is blocking other threads, due to it's lock on classloading via tomcat. 这是我们最近在生产系统中遇到的一种情况,在该系统中,脚本执行阻止了其他线程,因为它锁定了通过tomcat进行类加载。 The following is the stacktrace for the lock owner in thread dump: 以下是线程转储中锁所有者的堆栈跟踪:

"Thread-64" : 150 : BLOCKED : cpu=37812500000 : cpuLoad= 0.0
BlockedCount:93354 BlockedTime:-1 LockName:java.lang.Object@219d66b6 LockOwnerID:151 LockOwnerName:Thread-65
WaitedCount:13 WaitedTime:-1 InNative:false IsSuspended:false   at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntries(AbstractSingleArchiveResourceSet.java:66)
    at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:262)
    at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
    at org.apache.catalina.webresources.Cache.getResource(Cache.java:62)
    at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
    at org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2173)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:811)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1260)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at java.lang.Class.forName0(Class.java:-2)
    at java.lang.Class.forName(Class.java:348)
    at bsh.classpath.ClassManagerImpl.classForName(null:-1)
    at bsh.NameSpace.classForName(null:-1)
    at bsh.NameSpace.getImportedClassImpl(null:-1)
    at bsh.NameSpace.getClassImpl(null:-1)
    at bsh.NameSpace.getClass(null:-1)
    at bsh.Name.consumeNextObjectField(null:-1)
    at bsh.Name.toObject(null:-1)
    at bsh.BSHAmbiguousName.toObject(null:-1)
    at bsh.BSHAmbiguousName.toObject(null:-1)
    at bsh.BSHPrimaryExpression.eval(null:-1)
    at bsh.BSHPrimaryExpression.eval(null:-1)
    at bsh.BSHVariableDeclarator.eval(null:-1)
    at bsh.BSHTypedVariableDeclaration.eval(null:-1)
    at bsh.Interpreter.eval(null:-1)
    at bsh.Interpreter.eval(null:-1)
    at bsh.Interpreter.eval(null:-1)
    at my.package.MyClassFile(MyClassFile:2332)

I see that Groovy is a more popular choice for Java scripting, but I haven't seen many posts where it says that bsh can cause deadlocks. 我看到Groovy是Java脚本编写的一个比较流行的选择,但是我没有看到很多帖子说bsh会导致死锁。

It would be good to get some ideas from SO users. 从SO用户那里获得一些想法是很好的。

Regards, 问候,

There's a fix for one dead lock in GUI does not start in Java 8 found in Beanshell (almost latest) version 2.0b5. 有一个针对GUI中的死锁的修复程序,该死锁无法在Beanshell(几乎最新)版本2.0b5中找到的Java 8中启动

You can open a new issue in Beanshell project. 您可以在Beanshell项目中打开一个新期刊

It may be connected to ClassManagerImpl : 它可以连接到ClassManagerImpl

Bsh has a multi-tiered class loading architecture. Bsh具有多层的类加载体系结构。 No class loader is created unless/until a class is generated, the classpath is modified, or a class is reloaded. 除非/直到生成类,修改类路径或重新加载类,否则不会创建任何类加载器。

Note: we may need some synchronization in here 注意:我们可能需要在此处进行一些同步

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM