如何统计weblogic中的卡住线程?

时间:2013-04-23 02:34:50

标签: weblogic-10.x

有一个日志显示由Weblogic标记的卡住线程:

<Apr 23, 2013 7:48:25 AM CST> <Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: '276' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "668" seconds working on the request "weblogic.servlet.internal.ServletRequestImpl@23ba221b[
GET /XXX/saveInfo.do?fx=duration&info=25159,0,0,0,0,0,0,25153 HTTP/1.1

在我的情况下,我们观察到是否存在太多卡住的线程,我们的服务器响应时间会变慢并且会占用越来越多的内存。

我想让卡住线程的计数成为我的自动报告机器人的健康索引。如何计算除日志文件以外的数据?是否有任何命令或API帮助我计算卡住的线程?


总结了来自@viccari的解决方案(wlst示例代码):

from tempfile import mktemp

connect('your_account', 'your_account_pass', 'localhost:7001')

# dump thread details to a temp file
file = mktemp()
threadDump(writeToFile="true", serverName="your_server_name", fileName=file)

# count the string token "[STUCK]" by line
count = 0
f = open(file, "r")
for line in f.readlines():
  if line.find("STUCK") > 0:
    count = count + 1

print "NUM_OF_STUCK_THREADS: ", count

1 个答案:

答案 0 :(得分:1)

您可以使用WLST(WebLogic脚本工具)脚本访问线程池运行状况详细信息(如果您熟悉Python,那应该不是问题),或者使用Java访问JMX计数器。

This post包含一个示例脚本,可以在存在卡住线程时发送警报电子邮件,在评论部分中,您将找到一些获取JMX计数器的Java代码示例。网上有两种方法的例子。