引起:java.net.NoRouteToHostException:无法分配请求的地址(地址不可用)

时间:2018-05-28 10:06:18

标签: java mysql hibernate docker

我有java应用程序连接到docker上的mysql。当我运行load test来保存和更新数据到mysql时,首先它运行corectly但是,过了一会儿我得到了

  

引起:java.net.NoRouteToHostException:无法分配请求的地址(地址不可用)

并立即退出程序。

我的程序通过hibernate连接到mysql,我使用以下代码与数据库进行交互:

 Session curentSession = sessionFactory.getCurrentSession();
        curentTransaction = curentSession.beginTransaction();
        curentSession.update(entity);
        curentTransaction.commit();

1 个答案:

答案 0 :(得分:1)

似乎当hibernate使用 getcurrentSession()打开会话时,在事务提交后关闭它,但tcp连接仍处于打开状态,状态为" TIME_WAIT"所以当我运行netstat -natp时,我得到了与3306(mysql端口)的大量连接。所以我有两个解决方案:

  1. 将我的连接设计更改为未关闭的数据库,并在每次事务中重新打开连接。
  2. 在状态" time_wait"中更改连接等待的时间用:
  3.   

    echo 30>的/ proc / SYS /净/的IPv4 / tcp_fin_timeout

    另外我发现在我的情况下更改 tcp_fin_timeout 并不是一个好方法。我将{{1>}从 DriverManagerDataSource 更改为 HikariDataSource 并使用 maximumPoolSize 管理与mysql数据库的连接。 所以与mysql数据库的巨大连接问题消失了。 ;)

    祝你好运