我有java应用程序连接到docker上的mysql。当我运行load test来保存和更新数据到mysql时,首先它运行corectly但是,过了一会儿我得到了
引起:java.net.NoRouteToHostException:无法分配请求的地址(地址不可用)
并立即退出程序。
我的程序通过hibernate连接到mysql,我使用以下代码与数据库进行交互:
Session curentSession = sessionFactory.getCurrentSession();
curentTransaction = curentSession.beginTransaction();
curentSession.update(entity);
curentTransaction.commit();
答案 0 :(得分:1)
似乎当hibernate使用 getcurrentSession()打开会话时,在事务提交后关闭它,但tcp连接仍处于打开状态,状态为" TIME_WAIT"所以当我运行netstat -natp
时,我得到了与3306(mysql端口)的大量连接。所以我有两个解决方案:
echo 30>的/ proc / SYS /净/的IPv4 / tcp_fin_timeout
另外我发现在我的情况下更改 tcp_fin_timeout 并不是一个好方法。我将{{1>}从 DriverManagerDataSource 更改为 HikariDataSource 并使用 maximumPoolSize 管理与mysql数据库的连接。 所以与mysql数据库的巨大连接问题消失了。 ;)
祝你好运