Weblogic控制台监控发现 环境>>服务器>>你的服务器>>监控>>线程 中活动执行线程竟然是2000多。同一套系统在另一套平台上,并且访问的人不少,也没有超过100。重启此应用,活动进程依然没有变化,真是奇怪。

查看转储线程堆:

==== FULL THREAD DUMP===============

            Tue Aug  :: 

            Oracle JRockit(R)R28.1.0---1.6.0_20---linux-x86_64

            "Main Thread" id=1idx=0x4 tid= prio= alive, waiting, native_blocked

                -- Waiting for notification on:weblogic/t3/srvr/T3Srvr@0xc70a6538[fat lock]

                atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)

                atjava/lang/Object.wait(J)V(Native Method)

                atjava/lang/Object.wait(Object.java:)

                atweblogic/t3/srvr/T3Srvr.waitForDeath(T3Srvr.java:)

                ^-- Lock released whilewaiting: weblogic/t3/srvr/T3Srvr@0xc70a6538[fat lock]

                atweblogic/t3/srvr/T3Srvr.run(T3Srvr.java:)

                atweblogic/Server.main(Server.java:)

                atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)

                -- end of trace

            "(Signal Handler)" id=2idx=0x8 tid= prio= alive, native_blocked, daemon

            "(OC Main Thread)" id=3idx=0xc tid= prio= alive, native_waiting, daemon

            "(GC Worker Thread 1)" id=?idx=0x10 tid= prio= alive, daemon

            "(GC Worker Thread 2)"id=? idx=0x14 tid= prio= alive, daemon

            "(GC Worker Thread 3)"id=? idx=0x18 tid= prio= alive, daemon

            "(GC Worker Thread 4)"id=? idx=0x1c tid= prio= alive, daemon

            "(Code Generation Thread1)" id= idx=0x20 tid= prio= alive, native_waiting, daemon

            "(Code Optimization Thread1)" id= idx=0x24 tid= prio= alive, native_waiting, daemon

            "(VM Periodic Task)" id=6idx=0x28 tid= prio= alive, native_blocked, daemon

            "Finalizer" id= idx=0x2ctid= prio= alive, native_waiting, daemon

                atjrockit/memory/Finalizer.waitForFinalizees(J[Ljava/lang/Object;)I(NativeMethod)

                atjrockit/memory/Finalizer.access$(Finalizer.java:)

                atjrockit/memory/Finalizer$.run(Finalizer.java:)

                atjava/lang/Thread.run(Thread.java:)

                atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)

                -- end of trace

            "Reference Handler" id=8idx=0x30 tid= prio= alive, native_waiting, daemon

                atjava/lang/ref/Reference.waitForActivatedQueue(J)Ljava/lang/ref/Reference;(NativeMethod)

                atjava/lang/ref/Reference.access$(Reference.java:)

                atjava/lang/ref/Reference$ReferenceHandler.run(Reference.java:)

                atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)

                -- end of trace

            "(Sensor Event Thread)"id= idx=0x34 tid= prio= alive, native_blocked, daemon

            "VM JFR Buffer Thread"id= idx=0x38 tid= prio= alive, in native, daemon

            "Timer-0" id= idx=0x3ctid= prio= alive, waiting, native_blocked, daemon

                -- Waiting for notification on:java/util/TaskQueue@0xc504e198[fat lock]

                atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)

                at java/lang/Object.wait(J)V(NativeMethod)

                atjava/lang/Object.wait(Object.java:)

                atjava/util/TimerThread.mainLoop(Timer.java:)

                ^-- Lock released whilewaiting: java/util/TaskQueue@0xc504e198[fat lock]

                atjava/util/TimerThread.run(Timer.java:)

                atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)

                -- end of trace

            "Timer-1" id= idx=0x40 tid=12416prio= alive, waiting, native_blocked, daemon

                -- Waiting for notification on:java/util/TaskQueue@0xc504e548[fat lock]

                atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)

                atjava/lang/Object.wait(J)V(Native Method)

                atjava/util/TimerThread.mainLoop(Timer.java:)

                ^-- Lock released whilewaiting: java/util/TaskQueue@0xc504e548[fat lock]

                atjava/util/TimerThread.run(Timer.java:)

                atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)

                -- end of trace

            "[ACTIVE] ExecuteThread: '0'for queue: 'weblogic.kernel.Default (self-tuning)'" id= idx=0x44tid= prio= alive, waiting, native_blocked, daemon

                -- Waiting for notification on:weblogic/work/ExecuteThread@0xc6e748b0[fat lock]

                at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(NativeMethod)

                atjava/lang/Object.wait(J)V(Native Method)

                atjava/lang/Object.wait(Object.java:)

                atweblogic/work/ExecuteThread.waitForRequest(ExecuteThread.java:)

                ^-- Lock released whilewaiting: weblogic/work/ExecuteThread@0xc6e748b0[fat lock]

                atweblogic/work/ExecuteThread.run(ExecuteThread.java:)

                atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)

                -- end of trace

            "[ACTIVE] ExecuteThread: '1'for queue: 'weblogic.kernel.Default (self-tuning)'" id= idx=0x48tid= prio= alive, waiting, native_blocked, daemon

                -- Waiting for notification on:weblogic/work/ExecuteThread@0xc6d42d00[fat lock]

                atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)

                atjava/lang/Object.wait(J)V(Native Method)

                atjava/lang/Object.wait(Object.java:)

                atweblogic/work/ExecuteThread.waitForRequest(ExecuteThread.java:)

                ^-- Lock released while waiting:weblogic/work/ExecuteThread@0xc6d42d00[fat lock]

                atweblogic/work/ExecuteThread.run(ExecuteThread.java:)

                atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)

                -- end of trace

            "[ACTIVE] ExecuteThread: '2'for queue: 'weblogic.kernel.Default (self-tuning)'" id= idx=0x4ctid= prio= alive, waiting, native_blocked, daemon

                -- Waiting for notification on:weblogic/work/ExecuteThread@0xc6e1c620[fat lock]

                atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/Object;)Z(Native Method)

                atjava/lang/Object.wait(J)V(Native Method)

                atjava/lang/Object.wait(Object.java:)

                atweblogic/work/ExecuteThread.waitForRequest(ExecuteThread.java:)

                ^-- Lock released whilewaiting: weblogic/work/ExecuteThread@0xc6e1c620[fat lock]

                atweblogic/work/ExecuteThread.run(ExecuteThread.java:)

                atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)

                -- end of trace

…………此处省略大量重复的信息

在下对weblogic了解甚少,对java开发也是丈二和尚,身边也没有懂weblogic的人,看来只能借助网络搜索了。百度、ITpub、CSDN全试了都没有相关问题。后来加了几个weblogic的qq群,在群里发问基本也是没人管。哎,这世界怎么就没有个好心人呢?不过好心人最终还是出现了,他直接就找到了问题所在——这个问题的原因就在启动参数上。(就是啊,重新启动都不行,那十有八九是启动参数的问题啊,我这笨脑子!)

造成这种情况的参数在weblogic\user_projects\domains\base_domain\bin下的setDomainEnvNaNd中的Dweblogic.threadpool.MinPoolSize。我的配置是这样的:

JAVA_OPTIONS="${JAVA_OPTIONS}${JAVA_PROPERTIES} -Dwlw.iterativeDev=${iterativeDevFlag}-Dwlw.testConsole=${testConsoleFlag} -Dweblogic.threadpool.MinPoolSize=2000 -Dweblogic.threadpool.MaxPoolSize=4000-Dwlw.logErrorsToConsole=${logErrorsToConsoleFlag}"

exportJAVA_OPTIONS

这里的-Dweblogic.threadpool.MinPoolSize=2000意思是默认线程池大小,这个参数设置多少合适我也不知道,具体设置于不设置有什么大的区别也不知道……额,反正是它在搞鬼。我将此参数去掉之后,重新启动,活动线程变少了。

网抄一些weblogic的知识,留作备查——————

检查线程数

通过weblogic控制台可以查看线程数的统计信息。weblogic9及以上的线程是自优化的。但应该查看系统的线程最大数是否过大,如果过大,就要注意系统为什么会有这么大的压力。如下为示例截图

对应中文翻译:

ActiveExecute Threads在活动的线程池内处理请求的线程个数

ExecuteThread Total Count线程池内线程的总数

ExecuteThread Idle Count池内的空闲线程数。它不包含stuck和standby的线程数。它是指等待接收新请求到来并处理的线程个数

queuelength 在等待队列里的请求数,通常保留默认值 65536 ,队列长度表明了同时发来请求的最大数, 65536 个请求是个很大的数,即使达到这个最大数,也是很少见的。如果达到最大队列长度,WebLogic 会自动成倍增长队列大小,以处理额外的工作。 注意:超过 65536 个请求预示队列中的线程有问题,不仅仅只是队列本身的长度问题,实践表明在队列中有堵塞线程或线程数不足的情况存在。

hoggingthread count 线程处理一个请求时间超过一定值被视为hogging状态,如果继续处理请求超过一定时间将被视为stuck,或处理完请求后被放回线程池

standbythread count 统计在standby(备用)线程池内的线程数。这些线程不需要处理当前请求被放入standby池内,当活动的线程池内需要更多线程时,这些线程将被激活。

Execute Thread Total Count= Active Execute Threads+ standbythread count

关于一次Weblogic活动线程的问题处理的更多相关文章

  1. CPU突然飙升到300%,Dubbo活动线程数直接飙到1000

    转:https://mp.weixin.qq.com/s/-lSiVDfqYrKk_w-xitYBhA 背景:新功能开发测试完成后,准备发布上线,当发布完第三台机器时,监控显示其中一台机器CPU突然飙 ...

  2. weblogic线程阻塞性能调优(图解)转

    声明:出现这个问题有程序方面.网络方面.weblogic设置方面等等原因,此文章主要讲述由于weblogic设置而导致的解决办法. 因为: 1.程序问题,需要项目自己去解决,weblogic在做优化处 ...

  3. weblogic线程阻塞性能调优(图解)

    转自:http://blog.csdn.net/z69183787/article/details/12647539 声明:出现这个问题有程序方面.网络方面.weblogic设置方面等等原因,此文章主 ...

  4. 3.jmeter jsr232 脚本获取当前测试的正在活动的线程数

    jsr232 groovy 脚本获取当前测试的正在活动的线程数 (需要选择 groovy类型, 如果使用beanshell或者javascript,请根据其语法稍作修改即可) import org.a ...

  5. weblogic运维时经常遇到的问题和常用的配置

      希望这篇能把weblogic运维时经常遇到的问题.常用的配置汇总到一起. 1.配置jvm参数: 一般在domain启动过程中会看到以下启动的日志信息,如下图所示: 图中红色方框部分为启动weblo ...

  6. 0039 Java学习笔记-多线程-线程控制、线程组

    join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long ...

  7. ExecutorService线程池

    ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{} 2.建立ExecutorService线程池 Executo ...

  8. Android之线程池深度剖析

    1.线程池的引入   引入的好处:   1)提升性能.创建和消耗对象费时费CPU资源   2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多.   使用条件:      假设在一台服务器完成一 ...

  9. Android 自定义线程池的实战

    前言:在上一篇文章中我们讲到了AsyncTask的基本使用.AsyncTask的封装.AsyncTask 的串行/并行线程队列.自定义线程池.线程池的快速创建方式. 对线程池不了解的同学可以先看 An ...

随机推荐

  1. Cassandra1.2文档学习(1)——Cassandra基本说明

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  2. 在使用MOS管时要注意的问题

    1.当Vds电压增大,Ciss增大,栅极充放电电流也会增大 2.MOS管的功率损耗要控制在额定功耗以下 3.在Buck电路中,开关MOS管的Vds在MOS管关断时会非常大

  3. microsoft office visio基本使用方法

    以下是画流程图.程序内存分配等等框图用到的点滴使用方法,记录在这里以备偶尔只需. 1.画大括号“{}” 在Visio操作界面下,依次点击“文件(File)”—“形状(Shapes)”--“其他Visi ...

  4. Web负载均衡的几种方式

    Web负载均衡的几种实现方式 摘要:负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用 ...

  5. windows appfabric samples

    http://www.microsoft.com/en-us/download/details.aspx?id=19603 http://msdn.microsoft.com/zh-cn/librar ...

  6. android SurfaceView绘制 重新学习--基础绘制

    自从大二写了个android游戏去参加比赛,之后就一直写应用,一直没用过SurfaceView了,现在进入了游戏公司,准备从基础开始重新快速的学一下这个,然后再去研究openGL和游戏引擎. 直接上代 ...

  7. 一个Bootstrap风格的分页控件

      http://www.cnblogs.com/wangwei123/p/3682626.html 主题 jQueryBootstrap 一个Bootstrap风格的分页控件,对于喜欢Bootstr ...

  8. discuz论坛很给力

    11.10:老彭在搭建好论坛. 11.17:  主网站导航中加入“论坛” 11.20: 使用“T客在线”的版本将论坛全新改版. 新版论坛非常大气,让网站增色不少.

  9. 启用EXCHANGE反垃圾邮件功能和重建EXCHANGE邮件系统帐号

    How to recreate System Mailbox , FederatedEmail & DiscoverySearchMailbox in Exchange 2010 http:/ ...

  10. 【Hihocoder 1167】 高等理论计算机科学 (树链的交,线段树或树状数组维护区间和)

    [题意] 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 少女幽香这几天正在学习高等理论计算机科学,然而她什么也没有学会,非常痛苦.所以她出去晃了一晃,做起了一些没什么意 ...