我有一个 jboss-4.2.3.GA 安装,我怀疑线程池可能会随着时间的推移而增加,因为线程没有被正确释放。当达到 maxthreads 时,我没有收到任何消息,所以我想每五分钟将正在使用的线程数记录到一个文件中,以便我可以验证这个假设。有人能建议如何做到这一点吗?
答案1
我知道这是一个老问题,但有人可能会觉得这很有趣。我遇到过类似的问题,我想监控 jboss 连接池与数据库的连接。我所做的就是创建一个小的 shell 脚本,每隔一分钟用它curl
从 JBoss jmx-console 获取相关页面。
我最终在我的bash
脚本中使用了类似的东西。
# Pools to check
POOLS="DefaultDS QuartzDS"
# Loop thru the pools and collect stats.
for pool in $POOLS;
do
# Construct the URL
url=http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean\&name=jboss.jca:service=ManagedConnectionPool,name=$pool
# Use 'curl' to fetch the web page, and awk to parse the output and put all rows with 'count' in them in a temp file.
curl $url | awk 'BEGIN{RS="<td>MBean"}/Count/{print $0}' > _tmp_PoolStat.txt
echo "Processing $pool"
<process data in tmp file using your favourite tool.>
done
在你的情况下,你需要修改url
以匹配你正在寻找的内容。由于我使用基于 *nix 的操作系统,我最终使用watch
它以固定间隔执行此脚本。
答案2
您可以使用 JMX 从 java 获取线程数。使用插件 jmx4perl,您可以从非常基本的 perl 脚本执行 JMX 调用。还有一个插件用于 Nagios 与 j4p 集成,以警告和监控各种参数。
http://blog.techstacks.com/2009/09/tomcat-management-jmx4perl-makes-it-easier.html有几个很好的例子。