У меня есть приложение Java, которое подключается к mysql на докере. когда я запускаю тест нагрузки для сохранения и обновления данных в mysql, сначала он запускается по-разному, но через некоторое время я получил
Вызывается: java.net.NoRouteToHostException: не может назначить запрошенный адрес (адрес недоступен)
и немедленно выйдите из программы.
моя программа подключается к mysql с помощью hibernate, и я использовал следующий код для взаимодействия с базой данных:
Session curentSession = sessionFactory.getCurrentSession();
curentTransaction = curentSession.beginTransaction();
curentSession.update(entity);
curentTransaction.commit();
Кажется, что при спящем режиме open session с getcurrentSession() закройте его после транзакции, но tcp-соединение все еще открыто со статусом "TIME_WAIT", поэтому, когда я запускаю netstat -natp
я получил огромное количество соединений с 3306 (mysql порт). поэтому у меня есть два решения:
echo 30>/proc/sys/net/ipv4/tcp_fin_timeout
Кроме того, я обнаружил, что изменение tcp_fin_timeout не является хорошим решением в моем случае. я изменяю dataSource
от DriverManagerDataSource до HikariDataSource и использовал maximumPoolSize для управления соединением с базой данных mysql. поэтому проблема огромного соединения с базой данных mysql исчезла. ;)
удачи