tomcat Mysql在填充过程中与应用程序断开连接

czq61nw1  于 12个月前  发布在  Mysql
关注(0)|答案(3)|浏览(200)

最近我得到了mac m1我正在运行一个使用email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)通过自制软件安装的产品,该产品的数据成功连接到mysql,并开始填充,但接近人口结束时,mysql有一个连接问题,并显示在使用mac m1和mysql5.6从池am获取连接异常。
错误如下
java.sql.SQLException:java.lang.Exception:从池中获取连接时发生异常从连接中获取连接时发生异常原因:com. mysql. jdbc. exceptions. jdbc 4. CommunicationsException:通信链路故障
这不会发生在产品启动时,但在80%的人群中。
配置文件my.cnf

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1

字符串

ocebsuys

ocebsuys1#

在MySQL配置文件中勾选max_connections,它根据您的应用需求管理同时连接数。

qnyhuwrf

qnyhuwrf2#

经过长时间的斗争和研究发现这个问题,从上面的解决方案,以增加max_connections和其他dosnt为我工作,对不起,我不能分享代码或任何其他信息的第三方应用程序,我只能访问日志文件.所以来的问题,部分是与我的mac.
有一个名为table_open_cache的参数,它与max_connections相关。例如,对于200个并发运行的连接,我们应该指定至少200 * N的表缓存大小,其中N是我们执行的任何查询中每个连接的最大表数。我们还必须为临时表和文件保留一些文件描述符
我的操作系统(即MAC)无法处理table_open_cache设置或my.cnf中指定的默认值所暗示的所有打开文件描述符的数量。在我的情况下,默认的table_open_cache设置得太高,MYSQL用完了文件描述符,并表现出拒绝连接或无法执行查询等症状。这就是为什么在填充过程中突然失去连接。

解决方案:我在.cnf文件中将table_open_cache变量减小到400,重启mysql服务器一次,问题就解决了。

xqkwcwgp

xqkwcwgp3#

连接池为您提供一定数量(已配置的最大数量)的数据库连接。
假设是:当你完成一个连接后,你将把它返回到池中。这可能是由垃圾收集器隐式完成的,但是对于一个长时间运行的进程,不能保证垃圾收集器在你的例程中运行。
如果你的代码像candy一样使用连接,并且从不返回它们(通常通过connection.close()),或者为每个操作使用新的连接,而不是重用单个连接,那么你可以快速耗尽连接池。这被称为“资源泄漏”。
增加可用连接的数量(如另一个答案中所建议的)* 可能 * 现在 * 对您有帮助 *,但稍后,当您的例程用更多数据填充数据库时,如果这些例程仍然占用连接,则会再次失败。
由于您既不提供配置细节,也不提供代码,所以这是可以给出的最多答案。

相关问题