【问题标题】:Java Thread Dump - Negative Line NumbersJava 线程转储 - 负行号
【发布时间】:2018-06-25 23:32:19
【问题描述】:

我只是想从线程转储中了解一些被阻止的项目:

"Thread-65" : 151 : RUNNABLE : cpu=36796875000 : cpuLoad= 0.29151857
BlockedCount:94117 BlockedTime:-1 LockName:null LockOwnerID:-1 LockOwnerName:null
WaitedCount:16 WaitedTime:-1 InNative:false IsSuspended:false   at java.util.zip.ZipFile.open(ZipFile.java:-2)
    at java.util.zip.ZipFile.(ZipFile.java:219)
    at java.util.zip.ZipFile.(ZipFile.java:149)
    at java.util.jar.JarFile.(JarFile.java:166)
    at java.util.jar.JarFile.(JarFile.java:130)
    at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:188)
    at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:173)
    at org.apache.catalina.webresources.AbstractArchiveResourceSet.openJarFile(AbstractArchiveResourceSet.java:316)
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:96)
    at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:265)
    at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
    at org.apache.catalina.webresources.CachedResource.validateResource(CachedResource.java:97)
    at org.apache.catalina.webresources.Cache.getResource(Cache.java:69)
    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.getResourceAsStream(WebappClassLoaderBase.java:1067)
    at java.lang.Class.getResourceAsStream(Class.java:2223)
    at bsh.BshClassManager.getResourceAsStream(null:-1)
    at bsh.classpath.ClassManagerImpl.getResourceAsStream(null:-1)
    at bsh.BshClassManager.loadSourceClass(null:-1)
    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.Name.toObject(null:-1)
    at bsh.NameSpace.get(null:-1)
    at bsh.Interpreter.get(null:-1)
    at bsh.Interpreter.getu(null:-1)
    at bsh.Interpreter.(null:-1)
    at bsh.Interpreter.(null:-1)
    at bsh.Interpreter.(null:-1)

我没有得到的是负行号。是不是说找不到源?

【问题讨论】:

  • 可能需要调试信息来确定信息丢失(二进制文件被编译为优化,去除了调试信息)

标签: java mxbean


【解决方案1】:

这些都是 beanshell 类。我猜他们这样做是为了避免混淆。

我猜他们在某些情况下(例如当您在 beanshell repl 中运行时)将其用作“技巧”来删除这些行。

您可以使用相同的技巧从转储中删除这些行。

这个可能相关的问题How to get the complete log for bean shell scripts in jmeter

建议将 debug() 指令添加到 beanshell 以获得较少限制的堆栈跟踪 - 也许如果您这样做,那么它会填充那些 bsh 堆栈行?

【讨论】:

  • 这些 Beanshell 现在导致内存中出现一些死锁,它试图通过 Tomcat 的类加载器打开 jar 文件并进入漫长的等待状态。我不确定在不知道行号的情况下如何真正解决这个问题。我想我将不得不以某种方式获取资源:(
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2019-01-10
  • 2011-11-27
  • 1970-01-01
相关资源
最近更新 更多