http://tekkamanninja.blog.chinaunix.net/uid-17176286-id-5180127.html
https://blog.csdn.net/z69183787/article/details/13288039
粘滞线程问题及简单解决
测试代码出现类似如下问题
####<Mar 25, 2017 9:33:09 AM CST> <Error> <WebLogicServer> <PSFPWEB01> <psfp_in> <[ACTIVE] ExecuteThread: '94' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1490405589083> <BEA-000337> <[STUCK] ExecuteThread: '19' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "626" seconds working on the request "weblogic.servlet.internal.ServletRequestImpl@5c1546e8[ POST /psfp-issued/resource/com.defonds .core.psfp.issued.biz.issued.resource.BatchIssuedResource/issued HTTP/1.1 Content-Type: application/json User-Agent: Java1.6.0_33 Accept: text/html, image/gif, image/jpeg, */*; q=.2 Connection: Keep-Alive Content-Length: 472401 ]", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace: Thread-412 "[STUCK] ExecuteThread: '19' for queue: 'weblogic.kernel.Default (self-tuning)'" <alive, in native, suspended, priority=1, DAEMON> {
,"weblogic.kernel.Default"是从客户端提交请求后产生的线程所在的队列名。这个队列的线程数默认是15个。如果超过15个线程堵塞,则部署的应用将不能访问。同时后台报:
<2008-2-27 下午09时37分48秒 CST> <Error> <WebLogicServer> <BEA-000337> <ExecuteThread: '14' for queue: 'weblogic.kernel.Default' has been busy for "1,720" seconds working on the request "Http Request: /myapp/test/index.jsp", which is more than the configured time (StuckThreadMaxTime) of "600" seconds.>
2,线程数(Tread Count):指派到weblogic.kernel.Default队列的线程数。如果你不需要使用超过15个线程(默认),就不必更改这个属性值。
如果发送该请求较多,很有可能会导致weblogic的线程阻塞,严重会引起weblogic挂起现象。
可以通过以下几种方法解决:
1)修改StuckThreadMaxTime参数,将默认的600s改成1200s,或者其它适合的值。
2)增大线程数,防止线程阻塞问题。
3)优化程序,减少处理时间。
1) 如何修改StuckThreadMaxTime参数值:http://lujinan858.iteye.com/blog/986237
启动weblogic服务,进入控制台:
your_domain->Environment->Servers->your_server->Configuration->Tuning->Stuck Thread Max Time
如下图:
2)怎样增大线程数
window环境下修改【bea】\user_projects\domains\my_domain\bin\setDomainEnv.cmd文件,查询最下面set JAVA_OPTIONS=%JAVA_OPTIONS%
改为:
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.threadpool.MinPoolSize=50
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.threadpool.MaxPoolSize=300
但是本地自测的话肯定就不是第一个问题了,而且如果一个线程600秒都没跑完,再改时间是没用的估计
后来找了一下原因,是因为在数据库修改数据没有提交。而应用页面操作同时对修改数据的表进行修改操作导致锁死不能动,因此出现粘滞线程。
WebLogic是怎样判断粘滞线程(Stuck Thread)和独占线程(Hogging Thread)的
粘滞线程(Stuck Thread),相对比较容易理解,就是那些执行时间超过“粘滞线程最长时间”(默认是600秒)的线程。联机文档是这样说的:
如果执行线程处理某个请求的粘滞时间超过了配置的粘滞线程最大时间,则为“真”。 |
True if the execute thread is stuck working on a request for more than the configured stuck thread maximum time. |
可以通过控制台的设置来增大或减小这个值(虽然绝大部分情况下修改这个值没有什么意义):
控制台 >> 环境 >> 服务器 >> MedRecSvr1 >> 配置 >> 优化 >> 粘滞线程最长时间
WebLogic把某些线程标记为Stuck Thread,是为了提醒我们那些线程执行的时间太长了。我们应该去分析线程为什么需要那么长时间才能执行完(甚至永远执行不完)。不去做根本原因的分析,而单纯的依靠增加“粘滞线程最长时间”这个值的设置来减少Stuck Thread线程的出现,是掩耳盗铃的做法。
独占线程(Hogging Thread),很多资料上都没有讲清楚。先来看看联机文档是怎么说的:
【独占】
如果根据调度程序的自动观察,某个请求独占执行线程的时间超过了正常执行时间,则为“真”。 |
True if the execute thread is being hogged by a request for much more than the normal execution time, as automatically observed by the scheduler. |
【独占线程计数】
请求现在所保留的线程。这些线程将在配置的超时过后被声明为粘滞或在超时结束前返回给池。自优化机制将在必要时进行回填。 |
The threads that are being held by a request right now. These threads will either be declared as stuck after the configured timeout or will return to the pool before that. The self-tuning mechanism will backfill if necessary. |
通过联机文档的解释可以看出,WebLogic要把一个线程标记为Hogging Thread需要满足两个条件:
(1)线程执行时间超过了“正常执行时间”。
(2)线程执行时间还没有超过“粘滞线程最长时间”。
随着时间的推移,Hogging Thread会出现两种不同的状态变化:
(1)在超过“粘滞线程最长时间”之前,请求执行完毕,Hogging Thread被释放,重新回到线程池,等待下一个请求的到来。
(2)超过“粘滞线程最长时间”之后请求还没有执行完毕,Hogging Thread被标记为Stuck Thread,直到最后执行完毕(虽然有可能永远执行不完)。
那么,问题就来了,什么叫做“正常执行时间”呢?它的工作原理是这样:
WebLogic实例在启动时候会同时启动一个计时器,这个计时器每两秒钟扫描一次所有线程,然后根据公式来判断是不是要把某个线程标记为Hogging Thread。
(1)对于那些在刚刚过去的两秒钟内执行完毕的线程,计算出它们的平均完成时间。假设有2个线程执行完了,Thread_A花了1秒,Thread_B花了5秒,那么平均时间Average_Time=(1+5)/2=3
(2)如果7*Average_Time大于4,那么把Hog_Duration设置为7*Average_Time,否则把Hog_Duration设置为4。这个Hog_Duration就是联机文档里面提到的“正常执行时间”。在我们的例子中 7*3=21 > 4 所以Hog_Duration设置为21
(3)逐个扫描其它正在执行的线程,如果某个线程的执行时间已经超过了21秒(Hog_Duration),那么就把该线程标记为Hogging Thread
友情提示,每个不同版本的WebLogic内部的运算机制可能并非是严格按照上面的公式和数值来判断的,这个例子只是为了讲解它的原理。
相关推荐
例如,可以将服务器的超载最大线程粘滞时间从 600 秒改为 1200 秒,同时将连接池的最大容量从 300 改为 3000。 ps 命令详解 在解决 WebLogic 启动失败的问题时,我们使用了 `ps` 命令来查找和杀掉进程。`ps` 命令是...
主要针对 节点状态、线程状态、独占线程、粘滞线程、jvm、jdbc等内容进行巡检,经过测试兼容weblogic9、11g、12c等多版本。 执行方法: 根据readme配置完成后,直接执行./check,sh即可 注意: 使用10.3.6.0过程中如...
weblogic的javacore分析工具
8. **ThreadLocal**:ThreadLocal是Java中用于线程局部变量的类,它可以为每个线程创建独立的变量副本,避免多线程环境下共享数据引发的并发问题。但在大型系统中,合理使用并注意内存泄漏是必要的。 9. **基于...
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
轻量级密码算法LBlock的FPGA优化实现.docx
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
Git 资料 progit-zh-v2.1.1.pdf
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
篮球计分器FPGA附程序..doc
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
内容概要:本文档全面介绍了Linux开发的基础知识、应用场景、环境搭建、常用命令、Shell脚本编程以及C/C++和Python开发等内容。首先阐述了Linux开发的重要性及其在服务器端开发、嵌入式开发和系统运维等领域的广泛应用。接着详细讲解了如何选择合适的Linux发行版并安装系统,配置开发环境,包括安装必要的开发工具和配置SSH服务。文档还深入讲解了Linux基础命令,如文件和目录操作、文件内容查看与编辑、进程管理和权限管理。此外,介绍了Shell脚本编程的基本语法,包括变量、条件语句、循环语句和函数定义。针对C/C++和Python开发,文档分别讲解了编译器安装、程序编写与编译、调试方法及使用虚拟环境等内容。最后,简要介绍了Linux内核开发的相关知识,包括下载编译内核、内核模块开发等,并推荐了相关学习资源。 适合人群:对Linux开发感兴趣的初学者及有一定经验的研发人员,尤其是希望深入掌握Linux开发技能的开发者。 使用场景及目标:①掌握Linux开发环境的搭建与配置;②熟悉Linux基础命令和Shell脚本编程;③学习C/C++和Python在Linux下的开发流程;④了解Linux内核开发的基本概念和技术。 阅读建议:此文档内容丰富,涵盖面广,建议读者根据自身需求选择性阅读,并结合实际操作进行练习。特别是对于初学者,应先掌握基础命令和开发环境的搭建,再逐步深入到编程语言和内核开发的学习。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接使用。
内容概要:本文档《word练习题.docx》是一份详细的Word操作练习指南,涵盖了从基础到高级的各种功能。文档分为三个主要部分:内容编辑、页面布局和高效文档。内容编辑部分包括文本格式化、段落设置、项目编号、制表位、边框与底纹等练习;页面布局部分涉及分节符、分栏、页眉页脚、水印等设置;高效文档部分则聚焦于样式管理、导航窗格、题注、书签、超级链接、脚注与尾注、交叉引用等功能。每个练习都有具体的操作步骤,帮助用户掌握Word的各种实用技巧。 适合人群:适用于Word初学者及希望提高Word技能的中级用户,尤其是需要频繁使用Word进行文档编辑和排版的办公人员。 使用场景及目标:①帮助用户熟悉Word的基本操作,如文本编辑、格式设置等;②提升用户的文档排版能力,学会设置复杂的页面布局;③提高工作效率,掌握高效文档管理技巧,如样式应用、题注和交叉引用等。 其他说明:此文档不仅提供了具体的练习题目,还附带了详细的步骤说明,用户可以根据指引逐步完成每个练习。此外,文档中的一些练习涉及到智能文档和Office智能客户端的应用,有助于用户了解Word在企业级应用中的潜力。建议用户按照章节顺序逐步学习,实践每一个练习,以达到最佳的学习效果。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
全球腐败感知数据(2000-2023)——3000行 33个指标 关于数据集 该数据集包含3000行和33列,涵盖了2000年至2023年的腐败感知指数(CPI)数据和各种治理指标。它包括国家排名、分数和其他指标,如公共部门腐败、司法腐败、贿赂指数、商业道德、民主指数、法治、政府效率、经济指标和人类发展指数。 这些数据可用于: 腐败趋势分析 腐败对GDP、人类发展指数和治理的影响 跨国比较 数据可视化和机器学习模型 该数据集对研究人员、数据分析师、政策制定者和对研究全球腐败趋势非常有用。