Вызвано: java.net.NoRouteToHostException: Невозможно назначить запрошенный адрес (Адрес не доступен) - PullRequest
0 голосов
/ 28 мая 2018

У меня есть приложение Java, которое подключается к MySQL на Docker.когда я запускаю нагрузочный тест для сохранения и обновления данных в mysql, сначала он запускается корректно, но через некоторое время я получил

Причина: java.net.NoRouteToHostException: Невозможно назначить запрошенный адрес (Адрес недоступно)

и программа немедленно завершается.

моя программа подключается к mysql через hibernate, и я использовал следующий код для взаимодействия с базой данных:

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

1 Ответ

0 голосов
/ 28 мая 2018

Похоже, что когда hibernate открыт сессию с getcurrentSession () , закройте его после фиксации транзакции, но соединение tcp все еще открыто со статусом «TIME_WAIT», поэтому при запуске netstat -natp я получилогромное количество подключений к 3306 (порт mysql).поэтому у меня есть два решения:

  1. изменить дизайн моего соединения с базой данных, которая не закрывается, и повторно открыть соединение в каждой транзакции.
  2. изменить время ожидания соединения в состоянии "time_wait"с:

эхо 30> / proc / sys / net / ipv4 / tcp_fin_timeout

Кроме того, я обнаружил, что изменилось tcp_fin_timeout это не хорошее решение в моем случае.я изменил dataSource с DriverManagerDataSource на HikariDataSource и использовал maximumPoolSize для управления подключением к mysqlбаза данных.Таким образом, проблема огромного подключения к базе данных MySQL исчезла.;)

удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...