51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4202|回复: 3
打印 上一主题 下一主题

[求助] tomcat的线程分析问题请教

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-6-14 17:05:09 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
最近在研究tomcat的线程监控问题,遇到一些问题,看不太明白,请各路知情者赐教!!
从jvisualvm中进行dump thread之后,得到如下结果:
问题1:
"JMX server connection timeout 405" - Thread t@405
   java.lang.Thread.State: TIMED_WAITING on [I@1b995b8        at java.lang.Object.wait(Native Method)
        at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150)
        at java.lang.Thread.run(Thread.java:595)

这里的 [I@1b995b8是代表什么意思呢?"
问题2:
RMI TCP Connection(317)-192.168.5.250" - Thread t@401
   java.lang.Thread.State: TIMED_WAITING on com.sun.jmx.remote.internal.ArrayNotificationBuffer@e03500
        at java.lang.Object.wait(Native Method)
        at com.sun.jmx.remote.internal.ArrayNotificationBuffer.fetchNotifications(ArrayNotificationBuffer.java:344)
        at com.sun.jmx.remote.internal.ArrayNotificationBuffer$ShareBuffer.fetchNotifications(ArrayNotificationBuffer.java:122)
        at com.sun.jmx.remote.internal.ServerNotifForwarder.fetchNotifs(ServerNotifForwarder.java:169)
        at javax.management.remote.rmi.RMIConnectionImpl.fetchNotifications(RMIConnectionImpl.java:1215)
        at sun.reflect.GeneratedMethodAccessor343.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:592)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
        at sun.rmi.transport.Transport$1.run(Transport.java:153)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
        at java.lang.Thread.run(Thread.java:595)
怎么才能知道这里面的“com.sun.jmx.remote.internal.ArrayNotificationBuffer@e03500
”是被哪个进程拥有了呢?

问题3:
"http-8443-19" - Thread t@165
   java.lang.Thread.State: BLOCKED on java.lang.Class@f23b3c owned by: Prototyper
        at java.sql.DriverManager.getConnection(DriverManager.java:187)
        at com.catt.cwf.database.DatabaseConnection.getConnection(DatabaseConnection.java:28)
        at com.catt.cwf.database.SybaseDB.<init>(SybaseDB.java:41)
        at com.catt.cwf.database.FactoryDB.getCWSM(FactoryDB.java:47)
        at pub.source.DatabaseUtil.logUpdateDateBase(DatabaseUtil.java:212)
        at pub.source.LogOperateUtil.save(LogOperateUtil.java:233)
        at pub.source.LogOperateUtil.logSQLToDb(LogOperateUtil.java:279)
但是prototyper的线程信息里面又没有看到上面提示的那个class类,那应该怎么才能知道引起这么多为获得连接而处于block状态的线程的原因呢?:

"rototyper" - Thread t@32
   java.lang.Thread.State: RUNNABLE
        at sun.net.spi.DefaultProxySelector$2.run(DefaultProxySelector.java:186)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.net.spi.DefaultProxySelector.select(DefaultProxySelector.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:359)
        at java.net.Socket.connect(Socket.java:524)
        at java.net.Socket.connect(Socket.java:474)
        at java.net.Socket.<init>(Socket.java:371)
        at java.net.Socket.<init>(Socket.java:184)
        at com.sybase.jdbc3.timedio.RawDbio.doConnect(Unknown Source)
        at com.sybase.jdbc3.timedio.InStreamMgr.<init>(Unknown Source)
        at com.sybase.jdbc3.tds.Tds.login(Unknown Source)
        at com.sybase.jdbc3.jdbc.SybConnection.a(Unknown Source)
        at com.sybase.jdbc3.jdbc.SybConnection.a(Unknown Source)
        at com.sybase.jdbc3.jdbc.SybConnection.<init>(Unknown Source)
        at com.sybase.jdbc3.jdbc.SybConnection.<init>(Unknown Source)
        at com.sybase.jdbc3.jdbc.SybDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(DriverManager.java:525)
        at java.sql.DriverManager.getConnection(DriverManager.java:140)
        at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(DefaultConnectionBuilder.java:39)
        at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java:159)
        at org.logicalcobwebs.proxool.Prototyper.sweep(Prototyper.java:102)
        at org.logicalcobwebs.proxool.PrototyperThread.run(PrototyperThread.java:44)


另外,有谁知道通过线程具体怎么分析内存泄露和连接池满的具体过程吗??不胜感激
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

4#
发表于 2012-6-21 18:40:38 | 只看该作者
关于jvisualvm,其实还有很多插件可以安装,帮助你分析问题。
另外从线程堆栈来看,似乎是连接池不够用,正在创建新的连接,你需要检查是不是这个原因导致的线程block。分析线程block可以用很多工具,不用从文件自己看,那样可能不方便分析。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2012-6-15 09:18:39 | 只看该作者
回复 2# 云层
大家测试的时候没遇到过类似的问题么。。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

2#
发表于 2012-6-15 08:37:39 | 只看该作者
这个问题你要问设计tomcat的人,或者管理tomcat的人
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-8 13:38 , Processed in 0.077708 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表