如何解决长时间运行的JDBC问题?

时间:2016-05-13 21:16:28

标签: java oracle jdbc classloader weblogic11g

我们有一个应用程序由于STUCK线程而经历间歇性缓慢。从转储堆栈跟踪中,我们拼凑起来似乎总是看起来是一个运行的线程,它看起来花费的时间太长(导致其他线程等待JDBC驱动程序清除)但是跟踪结束的地方。

有没有办法弄清楚这个帖子在做什么,或者是否存在可能适用的原因/常见问题?

]", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace:
java.util.zip.ZipFile.getEntry(Native Method)
java.util.zip.ZipFile.getEntry(ZipFile.java:161)
java.util.jar.JarFile.getEntry(JarFile.java:209)
java.util.jar.JarFile.getJarEntry(JarFile.java:192)
sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:757)
sun.misc.URLClassPath.getResource(URLClassPath.java:169)
java.net.URLClassLoader$1.run(URLClassLoader.java:194)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:249)
java.sql.DriverManager.getCallerClass(DriverManager.java:477)
java.sql.DriverManager.getDrivers(DriverManager.java:373)
oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:543)
oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:404)
oracle.jdbc.xa.client.OracleXADataSource.getPooledConnection(OracleXADataSource.java:674)
oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:267)
oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:134)

我们的设置是WebLogic 10.3.6,多个托管服务器,多个GridLink数据源。此应用程序特别与另一个应用程序共享一个托管服务器,但它们每个都有自己的GridLink DS。

2 个答案:

答案 0 :(得分:0)

根据我的经验,DBA应该能够帮助您跟踪线程和正在运行的sql语句以及每个语句执行所花费的时间。

答案 1 :(得分:0)

您可以在本地运行该应用程序吗?您可以将Java VisualVM(它是Oracle JDK的一部分。命令为jvisualvm)附加到进程并监视它,直到您看到卡住的线程。 Visual VM也很擅长发现内存泄漏。

如果您无法在本地运行它,也许您可​​以使用ssh -Yssh -X通过SSH连接到正在运行的实例以转发X11(假设服务器正在运行Linux)。然后,您可以在服务器上运行VisualVM,但在本地查看输出(如果您不在Linux上开发,则需要为Windows / Mac安装X11服务器)。