WebLogic执行线程耗尽解决方案( 二 )


WebLogic执行线程耗尽解决方案

文章插图
Socket Reader 线程接受来自监听线程队列的传入请求,并将该请求放入执行线程队列 。如果 Thread Dump 中没有 Socket Reader 线程,则在某个地方存在导致 Socket Reader 线程消失的错误 。应当始终保持至少有三个 Socket Reader 线程 。一个 Socket Reader 线程一般用于轮询功能,另外两个用于处理请求 。下面是一个 Thread Dump 示例中的 Socket Reader 线程 。
WebLogic执行线程耗尽解决方案

文章插图
通常,业务代码使用的是WebLogic默认的执行线程池,在WebLogic 8.1之前以“Default”命名,在9.x以后以“weblogic.kernel.Default(self-tuning)”命名 。查看执行线程的状态,主要看thread dump里面的state的值 。同时,为了更快的定位问题,WebLogic服务器会将运行时间超过600秒的执行线程标记为“STUCK”状态,如下所示:
WebLogic执行线程耗尽解决方案

文章插图

WebLogic执行线程耗尽解决方案

文章插图

WebLogic执行线程耗尽解决方案

文章插图

WebLogic执行线程耗尽解决方案

文章插图

WebLogic执行线程耗尽解决方案

文章插图

WebLogic执行线程耗尽解决方案

文章插图

WebLogic执行线程耗尽解决方案

文章插图
java中线程的状态
Thread Dump中,Java线程的各种状态如下:
状态
说明
NEW
初始状态 。线程刚刚被创建,并且start()方法还未被调用
RUNNABLE
运行状态 。表示线程正在java虚拟机中执行,但是可能正在等待操作系统的其他资源,比如CPU
BLOCKED
阻塞状态 。表示线程正在等待监视器锁 。表示线程正在等待获取监视器锁,以便进入同步方法或者同步代码快,也有可能是从wait()方法被唤醒而等待再次进入同步方法或者同步代码块
WAITING
等待状态 。表示当前线程需要等待其他线程执行一些特殊操作,比如当前线程调用了a.wait()方法,它正在等待其他线程调用a.notify或a.notifyAll方法;如果当前线程调用了threada.join(),那么它在等待threada执行完成
TIMED_WAITING
超时等待 。与WAITING的不同在于,该状态有超时时间
TERMINATED
终止状态,表示当前线程已经执行完毕
线程状态的详细介绍请参考Java源代码的Thread内部类:State 。
其中线程状态中WAITING与TIMED_WAITING区别如下:
调用以下三个方法会进入WAITING状态:
Object.wait() 不设置超时时间
Thread.join() 不设置超时时间
LockSupport.park() 不设置超时时间
调用下面的方法会进入TIMED_WAITING状态:
Object.wait(time)
Thread.join(time)
Thread.sleep(time)
LockSupport.parkNanos(time)
LockSupport.parkUntil(time)
1.6、相关脚本
收集thread dump的示例脚本如下:
WebLogic执行线程耗尽解决方案

文章插图
更多WebLogic相关知识·:
WebLogic集群管理 生活中常用脚本及运维技巧 WebLogic图形化安装及静默安装
※部分文章来源于网络,如有侵权请联系删除;更多文章和资料|点击后方文字直达 ↓↓↓100GPython自学资料包阿里云K8s实战手册 [阿里云CDN排坑指南]CDN ECS运维指南 DevOps实践手册 Hadoop大数据实战手册 Knative云原生应用开发指南 OSS 运维实战手册云原生架构白皮书Zabbix企业级分布式监控系统源码文档10G大厂面试题戳领




推荐阅读