Назад | Перейти на главную страницу

Tomcat + mod_jk блокирует подключения mysql для других приложений Apache 2 VirtualHost

Я отвечаю за устаревшее веб-приложение Tomcat, работающее как webapps / ROOT. Раньше приложение работало на выделенном сервере Linux, но для экономии денег меня попросили переместить его на другой сервер Linux, где он использует базу данных MySQL вместе с несколькими приложениями PHP. Все они загружаются через Apache 2 с помощью VirtualHosts.

После перехода приложение Tomcat, кажется, время от времени «потребляет» все соединения с базой данных до такой степени, что приложение Tomcat не отвечает на запросы, но приложения PHP на сервере также не будут отвечать на запросы. Перезапуск Tomcat решает проблему.

В настоящее время мой совет состоит в том, чтобы настроить задание cron для отказов Tomcat каждый вечер. Это снижает количество таких инцидентов, но они все же происходят время от времени.

В этом приложении соединение с базой данных определяется в server.xml. Я пробовал модифицировать maxActive. Первоначально он был установлен на 99, но я изменил его на -1, но, похоже, это не помогло так или иначе.

<Resource name="jdbc/theApp" auth="Container"
          type="javax.sql.DataSource"
          username="tomcat"
          password="thePassword"
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/theApp?autoReconnect=true"
          maxActive="-1"
          maxIdle="20"
          maxWait="3000"
          removeAbandoned="true"
          removeAbandonedTimeout="300"
          logAbandoned="true"/> 

Вопрос: Кто-нибудь это видел? Если нет, есть ли способ помочь диагностировать, что не так? Исходная команда разработчиков недоступна.

Я видел несколько ситуаций, когда два разных приложения в конечном итоге боролись за ресурсы пула соединений mysql. В большинстве случаев это можно решить с помощью настройки mysql, но в некоторых случаях это проблема с приложением, которую необходимо решить.

Глядя на такие вещи, как mysql cli ПОКАЗАТЬ СПИСОК ПРОЦЕССОВ команда даст вам представление о том, что делает пул соединений. Я бы также посмотрел на отличный сценарий настройки mysql, чтобы получить представление о среде mysql. Отслеживается здесь: http://forge.mysql.com/projects/project.php?id=44

Если вы действительно хотите ограничить ущерб, который может нанести приложение tomcat, вы всегда можете установить максимальное количество подключений контейнера на число меньше, чем max_connections переменная для mysql.