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

0

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

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

и немедленно выйдите из программы.

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

 Session curentSession = sessionFactory.getCurrentSession();
        curentTransaction = curentSession.beginTransaction();
        curentSession.update(entity);
        curentTransaction.commit();
  • 0
    Исключение кажется достаточно ясным
  • 0
    Но это происходит через некоторое время, сначала все работает нормально.
Теги:
docker
hibernate

1 ответ

1

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

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

echo 30>/proc/sys/net/ipv4/tcp_fin_timeout

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

удачи

Ещё вопросы

Сообщество Overcoder
Наверх
Меню