java - 有没有办法在 Oracle 异常上触发 jvm 线程转储?

标签 java oracle websphere deadlock

我们有一个在 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/

相关文章:

oracle - SQL*Plus 输入 : How do you get input from user into varchar2 variable?

oracle - PL/SQL Who am I 函数类似于 T-SQL 的 OBJECT_NAME(@@PROCID)

sql - 为什么这个查询要进行全表扫描?

java - EAR 文件和 "WebSphere Enhanced EAR"有什么区别?

java - 使用 wsdl 禁用和启用自动生成的 java 类的选项

java - 使用 SWT 进行 UI 的简单 Socket (Java) 应用程序中的 UI 卡住

java - 如何在 Java Swing 中自动滚动到底部

java - SSL 握手失败 Websphere 1 of 2 servers

Java 8 流 : Find first element after element

java - Erlang JInterface - OtpMBox 线程安全吗?