roe*_*erj 6 java debugging logging exception
我目前正在处理一些我继承的代码.执行它时,很多异常会记录到控制台,其中一个这样的异常如下所示:
["bg-thread-0" Id=28 RUNNABLE
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1400(ZipFile.java:56)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:677)
- locked java.util.zip.ZipFile@67369c20
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:413)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry.getBytes(BundleEntry.java:102)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:511)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:455)
...
Number of locked synchronizers = 1
- java.util.concurrent.ThreadPoolExecutor$Worker@66e5b079
]
Run Code Online (Sandbox Code Playgroud)
我正在使用Logback进行日志记录.现在我不知道生成或记录该异常的位置,因为该信息被删除了....我也不知道这意味着什么.我想这与死锁有关(因为Number of locked synchronizers = 1),但我不确定.
所以我的问题是:如何在这里继续?该异常是什么意思,我如何调试和查找它以及如何解决它?我真的没有任何线索,并会欣赏任何提示.谢谢!
这看起来更像是 Java 线程转储,而不是常规的堆栈跟踪。(我希望每个线程都能看到其中一个。)
当 JVM 外部的某个东西向 JVM 进程发送 SIGQUIT 信号时,您(通常)会得到 Java 线程转储。
本问答对如何追踪意外信号的来源有一些想法:
一种建议的方法是使用 Linux Audit 系统(请参阅 参考资料man auditctl),另一种方法是使用 systemtap。(我没有这方面的经验......但我确实发现了一些用于跟踪信号的 systemtap 示例:https: //sourceware.org/systemtap/examples/)。
就其价值而言,“同步器”是用于实现锁的构建块类;请参阅http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/package-summary.html。该行:
Number of locked synchronizers = 1
Run Code Online (Sandbox Code Playgroud)
实际上是说该线程当前持有一个锁。请注意,Oracle 没有正式记录线程转储的含义,并且他们显然表示格式可能会因版本/发行版而异。
| 归档时间: |
|
| 查看次数: |
2674 次 |
| 最近记录: |