您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

WebLogic执行线程耗尽解决方案

时间:2020-09-07 12:32:54  来源:  作者:

WebLogic执行线程耗尽解决方案

WebLogic执行线程耗尽

1.1、概述 更多WebLogic相关知识·:

WebLogic集群管理 生活中常用脚本及运维技巧 WebLogic图形化安装及静默安装

WebLogic服务器执行线程耗尽后就不再响应后续请求,WebLogic即出现挂起现象。

WebLogic线程耗尽产生的原因有多种,一般而言线程耗尽是由于线程在争夺某种资源。当一种资源处于缺少状态,比如数据库JDBC连接池的达到最大连接数,就会导致后续的业务线程都卡在等待获取JDBC的连接上,最终导致服务器无法响应后续的服务请求。

1.2、常见线程耗尽原因

WebLogic服务器线程耗尽,最常见的几种原因如下:

WebLogic、JDK自身的Bug

业务系统中采用的开源软件的Bug

主机硬件到达上限瓶颈,无法承担更多的负载

数据库JDBC连接池耗光,后续业务线程无法获取到可用JDBC连接而一直处于等待状态

应用程序同步调用。比如业务线程A执行的过程中锁定了资源1,而由于同步调用的原因导致其他业务线程不得不一直无限等待资源1的锁被释放。

业务系统没有使用WebLogic线程池,而使用自定义的线程池。当自定义线程池全部被占用,就会导致没有线程可用于新工作。

线程都处于等待RJVM、RMI响应

应用配置不合理,比如设置了错误JSP PageCheckSeconds参数等

1.3、判断条件

在出现以下情况时怀疑WebLogic服务器线程耗尽:

服务器不响应新的请求

请求超时

请求处理的时间越来越长(其最终结果可能是挂起)

通常,服务器挂起不会表现为服务器崩溃,但服务器挂起之后可能会崩溃。

1.4、收集信息

当服务器挂起时,首先使用 JAVA weblogic.Admin t3://server:port PING 来 ping 该服务器。如果服务器能够响应此 ping,则可能是应用程序所使用的线程池耗尽而不是服务器自身。

WebLogic Server 在8.1版本之前使用“Default”线程池响应客户端服务请求,在9.0版本以后使用Default (self-tuning)线程池响应客户端服务请求。这些是在发生线程耗尽时应当检查的线程池。通常情况下,用收集JVM的Thread Dump的办法来分析线程池运行信息。加粗样式

linux / Unix系统

任何WebLogic版本均可使用 kill -3 创建诊断问题所需的 Thread Dump。确保在每个服务器上执行几次,每次间隔大约 3 到 5秒,以帮助诊断死锁问题。

在WebLogic 9.2版本或者是更高的版本中,可以直接通过使用JDK的jstack命令来收集Thread Dump信息。

windows操作系统

任何WebLogic版本均可使用 - 来创建诊断问题所需的 Thread Dump。确保在每个服务器上执行几次,每次间隔大约 3 到 5 秒,以帮助诊断死锁问题。

在WebLogic 9.2版本或者是更高的版本中,可以直接通过使用JDK的jstack命令来收集Thread Dump信息。

1.5、实施步骤

收集操作系统、WebLogic运行相关基本信息

收集出现线程耗尽时间段WebLogic运行日志

采集Thread Dump

在服务器上快速分析Thread Dump,初步定位线程耗尽问题

重启线程耗尽WebLogic服务器,使其尽快对外提供服务

将采集到的Thread Dump下载到本地,进行详细的离线分析

1.6、分析Thread Dump

WebLogic除了包含业务系统所使用的执行线程池以外,还包括ListenThread线程池、Socket Reader线程池以及自定义线程池等等。由于WebLogic软件是非常复杂的企业软件,所以在分析的时候,我们不但需要关注业务执行线程池,同时也需要关注其他线程池。WebLogic线程池简易图示如下:

WebLogic执行线程耗尽解决方案

Thread Dump线程转储是将当前JVM包含的所有的线程的运行状态的一个映像,包含了:

各个线程的栈 (stacktrace)

线程当前的状态

线程名字

线程号(tid)以及对应的native thread id (nid) 等信息

分析WebLogic服务器线程耗尽的最有用的办法是分析一系列 的Thread Dump。一系列 Thread Dump(一般每隔3 到 5 秒进行三个或更多 Thread Dump)可以帮助分析每个线程从一个 Thread Dump 到另一个 Thread Dump 过程中的状态变化或所缺少的变化。WebLogic服务器线程耗尽导致服务器挂起后,服务器的 Thread Dump 一般显示线程状态从第一个 Thread Dump 到最后一个 Thread Dump 中变化很小。

在 Thread Dump 中查看的内容

所有请求都通过 ListenThread 进入 WebLogic Server。如果 ListenThread 丢失,就无法接收任何工作,因此也无法完成任何工作。确认在 Thread Dump 中存在 ListenThread。ListenThread 应当在 socketAccept 方法中。下面示例说明监听线程 (Listen Thread) 的形式。

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大厂面试题戳领



Tags:WebLogic   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
WebLogic执行线程耗尽解决方案WebLogic执行线程耗尽1.1、概述 更多WebLogic相关知识·:WebLogic集群管理 生活中常用脚本及运维技巧 WebLogic图形化安装及静默安装WebL...【详细内容】
2020-09-07  Tags: WebLogic  点击:(241)  评论:(0)  加入收藏
前言近期公布的关于 Weblogic 的反序列化RCE漏洞 CVE-2020-14645,是对 CVE-2020-2883的补丁进行绕过。之前的 CVE-2020-2883 本质上是通过 ReflectionExtractor 调用任意方法...【详细内容】
2020-08-21  Tags: WebLogic  点击:(113)  评论:(0)  加入收藏
1. Weblogic弱口令漏洞复现环境启动后,访问`http://your-ip:7001/console`,即为weblogic后台 登录窗口拦截数据包 send to repeater,positions下清空所有变量,add$账号密码变量...【详细内容】
2020-08-10  Tags: WebLogic  点击:(190)  评论:(0)  加入收藏
1. Weblogic弱口令漏洞复现环境启动后,访问`http://your-ip:7001/console`,即为weblogic后台 登录窗口拦截数据包 send to repeater,positions下清空所有变量,add$账号密码变量...【详细内容】
2020-08-10  Tags: WebLogic  点击:(143)  评论:(0)  加入收藏
近日,Oracle官方发布2020年7月关键补丁更新,共修复443个危害程度不同的安全漏洞。其中针对 WebLogic Server Core组件的高危漏洞4个,漏洞编号分别为CVE-2020-14625、CVE-2020-1...【详细内容】
2020-07-23  Tags: WebLogic  点击:(127)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条