windows 2000+tomcat5.5.9+jdk1.5+mysql在应用中出现了socket被占满的问题

happy8211 2009-09-21 04:30:13
如题所述:
服务器是windows 2000
web服务器是tomcat5.5.9安装版(内存设置512mb),使用的是jdk1.5.0_08
数据库使用mysql,使用了c3p0的连接池

有400个访问,有可能会同时访问,在运行了8天后,就出现了以下错误:
=2009-09-14 13:03:31 INFO [TimeActionTrigger] java.net.SocketException: No buffer space available (maximum connections reached?): connect
=2009-09-14 13:03:34 INFO [TimeActionTrigger] java.net.SocketException: No buffer space available (maximum connections reached?): connect
=2009-09-14 13:03:36 INFO [TimeActionTrigger] java.net.SocketException: No buffer space available (maximum connections reached?): connect
=2009-09-14 13:03:39 INFO [TimeActionTrigger] java.net.SocketException: No buffer space available (maximum connections reached?): connect
=2009-09-14 13:03:39 WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@178dff6 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
=2009-09-14 13:03:39 WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@178dff6 -- APPARENT DEADLOCK!!! Complete Status: [num_managed_threads: 3, num_active: 3; activeTasks: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@b7a8d9 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2), com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1ae7b73 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0), com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@2ac51d (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1); pendingTasks: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1f30577, com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1ec0319, com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1bf8b67, com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@593bfd, com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@7198aa]
=2009-09-14 13:03:41 INFO [TimeActionTrigger] java.net.SocketException: No buffer space available (maximum connections reached?): connect
=2009-09-14 13:03:42 WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1fa3fb4 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
=2009-09-14 13:03:42 WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1fa3fb4 -- APPARENT DEADLOCK!!! Complete Status: [num_managed_threads: 3, num_active: 3; activeTasks: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@153d8fd (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1), com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1cb0324 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0), com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@13b66bf (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2); pendingTasks: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@d68d69, com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1ddeafa]
=2009-09-14 13:03:51 INFO [TimeActionTrigger] java.net.SocketException: No buffer space available (maximum connections reached?): connect
=2009-09-14 13:03:54 INFO [TimeActionTrigger] java.net.SocketException: No buffer space available (maximum connections reached?): connect
=2009-09-14 13:03:56 INFO [TimeActionTrigger] java.net.SocketException: No buffer space available (maximum connections reached?): connect
=2009-09-14 13:03:57 WARN [com.mchange.v2.resourcepool.BasicResourcePool] com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@b7a8d9 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.SocketException: No buffer space available (maximum connections reached?): connect

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: No buffer space available (maximum connections reached?): connect

STACKTRACE:

java.net.SocketException: No buffer space available (maximum connections reached?): connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:516)
at java.net.Socket.connect(Socket.java:466)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:124)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1783)
at com.mysql.jdbc.Connection.<init>(Connection.java:450)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:107)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:161)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:113)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:728)
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1258)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:368)


** END NESTED EXCEPTION **

从上面能看出是socket被占满及socket连接来不及释放的问题,同时这个问题又了造成不能访问数据库。

我的tomcat配置:
<Connector
port="8080" maxHttpHeaderSize="8192"
maxThreads="8000" minSpareThreads="125" maxSpareThreads="175"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

我对windows 的socket连接数没有优化,还是默认的。我想问的是仅仅400个访问就能把socket占满么,会是什么问题能造成这种情况?
...全文
204 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaofancn 2009-10-19
  • 打赏
  • 举报
回复
才两个服务器就占满了,用个端口分析工具看再看看(端口与程序关联),不行查配置资料吧。我是个菜人。

5,657

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧