关于一次Weblogic活动线程的问题处理

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

查看转储线程堆:

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

Tue Aug 12 10:54:48 2014

Oracle JRockit(R)R28.1.0-123-138454-1.6.0_20-20101014-1350-linux-x86_64

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

-- Waiting for notification on:weblogic/t3/srvr/[email protected][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:485)

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

^-- Lock released whilewaiting: weblogic/t3/srvr/[email protected][fat lock]

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

atweblogic/Server.main(Server.java:71)

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

-- end of trace

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-- end of trace

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

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

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

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

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

-- end of trace

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

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

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

-- Waiting for notification on:java/util/[email protected][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:485)

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

^-- Lock released whilewaiting: java/util/[email protected][fat lock]

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

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

-- end of trace

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

-- Waiting for notification on:java/util/[email protected][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:509)

^-- Lock released whilewaiting: java/util/[email protected][fat lock]

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

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

-- end of trace

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

-- Waiting for notification on:weblogic/work/[email protected][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:485)

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

^-- Lock released whilewaiting: weblogic/work/[email protected][fat lock]

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

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

-- end of trace

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

-- Waiting for notification on:weblogic/work/[email protected][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:485)

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

^-- Lock released while waiting:weblogic/work/[email protected][fat lock]

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

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

-- end of trace

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

-- Waiting for notification on:weblogic/work/[email protected][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:485)

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

^-- Lock released whilewaiting: weblogic/work/[email protected][fat lock]

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

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活动线程的问题处理,布布扣,bubuko.com

时间: 2024-10-13 12:02:26

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

weblogic的线程阻塞,严重会引起weblogic挂起现象

Weblogic 线程处理的默认时间为600s,StuckThreadMaxTime:600.在运行一些将长时间的程序时经常会由于请求时间过长,导至超时.报出more than the configured time (StuckThreadMaxTime) of "600" seconds错误.或是由于发送该请求较多,很有可能会导致weblogic的线程阻塞,严重会引起weblogic挂起现象. 解决方法通常可以如下: 1:优化报错执行的程式,检查是个执行600s的程式是否可优化或是

通过设置Weblogic设置线程数提高系统并发

使用Weblogic版本:Weblogic 11g(10.3.6) 设置Weblogic的线程数有两种方法, 第一种,通过启动参数设置: -Dweblogic.threadpool.MinPoolSize=1000 -Dweblogic.threadpool.MaxPoolSize=1000 可以加在setDomainEnv.sh文件JAVA_OPTIONS下面: 第二种,通过config.xml配置文件: <server>     <name>AdminServer</na

设置Weblogic的线程数有两种方法

使用Weblogic版本:Weblogic 11g(10.3.6) 设置Weblogic的线程数有两种方法, 第一种,通过启动参数设置: 1 -Dweblogic.threadpool.MinPoolSize=1000 -Dweblogic.threadpool.MaxPoolSize=1000 可以加在setDomainEnv.sh文件JAVA_OPTIONS下面: 第二种,通过config.xml配置文件: 1 2 3 4 5 <server> <name>AdminServe

weblogic 解决线程阻塞

最近,发现应用在weblogic服务器运行一段时间后,会报超时错误,查看weblogic后台日志: <Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: '7' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "629" seconds working on the request &q

如何调整WEBLOGIC 11G 线程数

在网上查到两到方法: 第一方法:直接在启动命令里加上. -Dweblogic.threadpool.MinPoolSize=800 -Dweblogic.threadpool.MaxPoolSize=800 我是在setDomainEnv.sh 里的JAVA_OPTIONS中加的我公司机子上测试可以通过 第二方法:直接在配置文件中加上 1,在CONFIG.XML中的 <server> <name>Adminserver</name> <self-tuning-th

jprofiler+Linux+weblogic功能简介,配置及内存泄漏分析示例

jprofiler简介: jprofiler的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图.所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象. 一.主要功能简介 1.内存剖析 Memory profiler JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图.所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象. 所有对象 显示类或在状况统计和尺码信息堆上所有对象的包.你可

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

希望这篇能把weblogic运维时经常遇到的问题.常用的配置汇总到一起. 1.配置jvm参数: 一般在domain启动过程中会看到以下启动的日志信息,如下图所示: 图中红色方框部分为启动weblogic domain的命令.其中包括了jvm参数以及classpath信息. [注意] java -client是由于之前建立的domain是开发模式的.生产模式的话,这里执行的是java -server.至于-client与-server的区别,大家去google下吧,这里不介绍了. 那如何修改这个配

POSIX 线程详解(经典必看)

总共三部分: 第一部分:POSIX 线程详解                                   Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  2000 年 7 月 01 日 第二部分:通用线程:POSIX 线程详解,第 2部分       Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  20

应用CLR的线程池

大家都知道这个线程的建立和销毁都需要很大的性能开销,当有比较多且不同的任务需要完成时,可以考虑使用线程池来管理这些线程.在以windows NT为内核的操作系统上每个进程都包含一个线程池,在线程池中存在许多可以被随时使用的线程,当应用程序使用时,可以从线程池中直接取出一个已经存在的线程,当某个线程使用完成后,不会立即销毁,而是放入线程池中等待下一次的使用. 在C#中,通过System .Threading.ThreadPool提供了以下的常用方法和说明. 方法名称 说明 BindHandle 将