我们有一个在 Websphere 中运行的 Java 程序,并使用直接使用 jdbc 的 Oracle 数据库(无 Hibernate 或 JPA)。我们的客户正在使用 HP Performance Center 进行负载测试,他在负载下偶尔会遇到 Oracle“死锁”异常
Caused by: java.sql.SQLException: ORA-00060: deadlock detected while waiting for resource
有没有一种方法可以在代码中或外部强制进行与发生此异常时kill -3
jvm 相同类型的线程转储?
最佳答案
如果无法自动检测异常发生的时间,那么了解如何枚举线程就没有多大用处。
我们一直这样做。我们基本上使用:
Thread.setDefaultUncaughtExceptionHandler
当我们的应用程序启动时,然后我们在发生异常时转储我们想要的信息:
Map<Thread, StackTraceElement[]> mst = Thread.getAllStackTraces();
Runtime.getRuntime().freeMemory()
/maxMemory()
/totalMemory()
获取基本内存信息用户使用模式(如果是用户可以与之交互的应用)
自制“分析”
等等
然后你可以调用很多其他的东西并变得更有趣。例如,我们会自动将崩溃报告(包括完整的堆栈跟踪)发送到等待此类跟踪的服务器。
关于java - 有没有办法在 Oracle 异常上触发 jvm 线程转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870764/