从你的日志信息来看有很多阻塞的线程,当达到weblogic设置的600秒后就会报错,原因有很多最常见的有两种:

一种是当线程请求数据库连接时没有可用的连接因此在等待然后超时,解决方法是看看weblogic和数据库方面对新连接有没有限制,有的话把限制解除。

第二种就是代码问题了,对于这个问题简单来说就是内存泄露和线程死锁导致wls hang,可能是你的代码问题也可能是使用的三方框架的bug,通常是使用命令工具查找是哪个线程泄露和死锁,解决wls hang可用参照以下方法:

Hang产生的原因一般为:

–系统内存不足

–系统cpu忙

–系统文件描述符数目不足

–线程死锁

–JVM有GC方面的bug

–对于一些特定的情况可以使用truss命令跟踪系统调用来进行分析

线程死锁


–对于原因不明的hang或是响应慢,最根本的方法就是获取thread dump信息

•对于windows系统,在运行java的窗口按Ctrl+Break

•对于unix系统,首先用ps找到运行weblogic的java进程的pid,然后执行kill –3pid

•JVM将负责将所有java进程的状态、执行堆栈dump到其标准输出

•为了方便获取thread dump信息,在weblogic启动的时候,最好将其标准输出重定向到一个文件

•为了反映线程状态的动态变化,需要接连多次做thread dump,每次间隔10-20s

对于thread dump信息,主要关注的是线程的状态和其执行堆栈

–线程的状态一般为三类

•Runnable(R):当前可以运行的线程

•Waiting on monitor(CW):线程主动wait

•Waiting for monitor entry(MW):线程等锁

–一般关注的都是第一和第三种状态的线程

•Cpu很忙则关注runnable的线程

•Cpu闲则关注waiting for monitor entry的线程

–一种典型的死锁是由于在server端应用(比如servlet)中请求由同一weblogic实例serve的资源

•解决办法就是将该servlet放到另外的执行队列里去执行

可以看我以前给你的帖子weblogic高CPU的分析---就在本论坛​