高分悬赏一个棘手的mysql连接问题
近期后台日志频繁报这个异常错误,让人很恼火,不知什么原因,请高手朋友帮忙看看!
jdbc连接的数据。
The driver was unable to create a connection due to an inability to establish the client portion of a socket.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.
For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.
For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).
at sun.reflect.GeneratedConstructorAccessor17.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2103)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.GeneratedConstructorAccessor10.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
[解决办法]
是不是用了连接池,限制了连接数?
但是连接用完没有销毁呢?
其实我不知道,猜的
[解决办法]
日志已经提示的很清楚了,你按照错误日志上的做就可以了
[解决办法]
看上去使用了连接池。应该是插入或查询的数量过多造成的。
[解决办法]
可能是连接池出现问题,
[解决办法]
日志连解决办法都告诉你了,需要去按他说的试试
[解决办法]
· 通过调查连接池以及可能的持久连接,减少快速消耗的TCP端口数。
· 调整Windows注册表中的某些设置(请参见下面)。
要点:下述步骤涉及更改Windows注册表。更改注册表之前,请备份注册表,并确认你已掌握在出现问题时恢复注册表的方法。关于备份年、恢复和编辑注册表的更多信息,请请参见Microsoft知识库中的下述文献:http://support.microsoft.com/kb/256986/EN-US/。
· 启动注册表编辑器(Regedt32.exe)。
· 在注册表中确定下述键值的位置:
·
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
· 在“编辑”菜单上点击“添加值”,然后增加下述注册值:
·
Value Name: MaxUserPort
·
Data Type: REG_DWORD
·
Value: 65534
它用于设置为任何用户提供的临时端口数。有效范围介于5000和65534之间(十进制)。默认值为0x1388(5000,十进制)。
· 在“编辑”菜单上点击“添加值”,然后增加下述注册值:
·
Value Name: TcpTimedWaitDelay
·
Data Type: REG_DWORD
·
Value: 30
它用于设置关闭之前将TCP端口连接保持在TIME_WAIT状态的秒数。有效范围介于0秒和300秒之间。默认值为0x78(120秒)。
· 退出注册表编辑器。
· 重新引导机器。
注释:撤销上述设置十分简单,就像删除你创建的注册表一样。
经过以上的修改,OK!