由于记录时间比较靠后,因此问题详情未能记录下来
该错误主要解决方法是:https://blog.csdn.net/zl386119974/article/details/29205633
简单来说就是系统对于短连接数有一个上限,当上限数量不足时可以通过该方法进行增加上限的方式解决。
但是我遇到的问题不是这个,首先我通过查询数据库连接数量:
参数释义:
cached:缓存的连接数
connected:正在使用中的连接数
created:自数据库服务开启以来数据库创建的连接数量
上图是经过处理之后的显示,未处理前的样子因为没能记录,所以只能答题说一下:
cached数量为个位数9,connected数量为两位数10到19,created为20多万,且仍然在急速增加中。
这个问题是因为cached设置过低的原因,首先查看当前设置数量
show global status like ‘Thread%’;
查看数据显示的是9,而connected数量大于该值,因此必然会不停创建新的连接,导致created数值一路飙升。
解决办法:
my.cnf 配置文件,[mysqld] 下 增加
thread_cache_size = 64
重启数据库服务,注意这里配置的数量需要根据connected和实际的物理内存大小进行设置
设置依据:
内存 数值
1G —> 8;
2G —> 16;
3G —> 32;
>3G —> 64
目前created数值的增长已经极大的降低下来,但是是否彻底解决了问题,目前还没有结论
2020-08-26 上午8:00-9:30 系统再次出现上述问题:
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.GeneratedConstructorAccessor16.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:407) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:343) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2334) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2371) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2163)
此时查看数据库连接数
数据正常,显然不是上述问题。
解决办法:首先将系统回退到上一个版本,但是重启之后,问题仍然存在。
然后通过https://blog.csdn.net/shiyong1949/article/details/73776978文章
我们可以通过修改注册表配置来解决问题:
1,启动注册表编辑器(Regedt32.exe )。
2,在注册表中确定下述键值的位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
在“编辑”菜单上点击“添加值”,然后增加下述注册值:
Value Name: MaxUserPort
Data Type: REG_DWORD
Value: 65534
它用于设置为任何用户提供的临时端口数。有效范围介于5000 和65534 之间(十进制)。默认值为0x1388 (5000 ,十进制)。
3,在“编辑”菜单上点击“添加值”,然后增加下述注册值:
Value Name: TcpTimedWaitDelay
Data Type: REG_DWORD
Value: 30
它用于设置关闭之前将TCP 端口连接保持在TIME_WAIT 状态的秒数。 有效范围介于0 秒和300 秒之间。默认值为0x78 (120 秒)。
4,退出注册表编辑器。
5,重启服务器。
我查看当时的配置,已经存在MaxUserPort值(因为这个问题之前遇到过,所以这个值应该是那时候创建的)
因此,这一次,我增加TcpTimedWaitDelay值之后重启。
问题解决,但是因为是新系统出的问题,而重启服务器之后使用的是老系统(虽然老系统在重启之前也存在相同的问题),因此还不能确定问题解决,要到中午,车间休息的时候,重新换上新系统,查看是否不再出现问题。
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}