Однажды веб-страницу на сервере не удалось открыть, и часто сообщалось о следующей ошибке.
2007-3-18 1:08:26 org.apache.tomcat.util.threads.ThreadPool logFull
Серьезно: все потоки (150) в настоящее время заняты и ждут. Увеличьте maxThreads (150) или проверьте статус сервлета.
Я нашел несколько ответов в Интернете. Вот ответы, которые я считаю правильными.
1. Я думаю, что некоторые ваши ресурсы не были освобождены и зависли из-за невыполненной работы.
2. Проблема с пулом соединений.
3. Это должно быть вызвано длительным временем обработки потока, отвечающего на запрос на стороне сервера
:
В то время веб-сайтом пользовались всего два человека, поэтому одновременное подключение 150 потоков к сети было невозможно. Так что это не должно быть проблемой с базой данных.
Судя по подсказкам об ошибках, это должно быть вызвано неразумным использованием пула соединений, либо пул соединений вообще не установлен. Часть, подключенная к базе данных, подключается с помощью источника данных Spring JDBC следующим образом:
<бобы>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- драйвер для MySQL-->
<property name="driverClassName"><value>org.gjt.mm.mysql.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8</value></property>
<property name="username"><value>тест</value></property>
<property name="password"><value>тест</value></property>
</beans>
Проблема должна возникнуть в Spring DriverManagerDataSource, который отвечает за управление этими соединениями.
Ниже приводится объяснение DriverManagerDataSource.
DriverManagerDataSource в Spring Framework
Интерфейс javax.sql DataSource.
Реализация SmartDataSource, которая настраивает старый добрый драйвер JDBC через
bean-компонента и каждый раз возвращает новое соединение.
Полезно для тестовых или автономных сред вне контейнера J2EE.
как компонент DataSource в соответствующем ApplicationContext или в сочетании с
простая среда JNDI, предполагающая использование пула, вызовы Connection.close() будут просто.
закройте соединение, чтобы любой сохраняемый код, поддерживающий DataSource, работал.
В контейнере J2EE рекомендуется использовать JNDI DataSource, предоставляемый пакетом.
Такой DataSource можно экспортировать как bean-компонент DataSource в файле.
ApplicationContext через JndiObjectFactoryBean для плавного переключения между
локальный компонент DataSource, подобный этому классу.
Если вам нужен «настоящий» пул соединений вне контейнера J2EE, рассмотрите возможность.
DBCP от Apache Jakarta Commons. Его BasicDataSource представляет собой полный пул соединений.
bean-компонент, поддерживающий те же основные свойства, что и этот класс, плюс определенные настройки.
Его можно использовать в качестве замены экземпляра этого класса, просто изменив
имя класса определения компонента для
"org.apache.commons.dbcp.BasicDataSource
-------------------------------------
".--------- ----------
Многие проекты Джакарты поддерживают взаимодействие с реляционной базой данных.
новое соединение для каждого пользователя может занять много времени (часто требуется несколько
секунд тактового времени), чтобы выполнить транзакцию базы данных, которая может
открытие соединения для каждого пользователя может быть невозможным в течение миллисекунд.
общедоступное интернет-приложение, в котором количество одновременных пользователей может
быть очень большим. Соответственно, разработчики часто желают совместно использовать «пул» открытых ресурсов.
соединения между всеми текущими пользователями приложения. Количество пользователей.
фактическое выполнение запроса в любой момент времени обычно занимает очень мало времени.
процент от общего количества активных пользователей, а при обработке запроса
единственный раз, когда требуется подключение к базе данных. Само приложение.
входит в СУБД и решает любые проблемы с учетными записями пользователей внутри компании.
Уже доступно несколько пулов подключений к базе данных, оба внутри.
Продукты Джакарты и других стран. Этот пакет Commons предоставляет возможность.
координировать усилия, необходимые для создания и поддержания эффективной,
многофункциональный пакет по лицензии ASF.
Для предоставления пакета commons-dbcp используется код пакета commons-pool.
базовые механизмы пула объектов, которые он использует.
Приложения могут использовать компонент commons-dbcp напрямую или через существующий.
интерфейс их контейнера/вспомогательной среды. Например, Tomcat.
Контейнер сервлетов представляет источник данных DBCP как источник данных JNDI James (Java.
Apache Mail Enterprise Server) интегрировал DBCP в структуру Avalon A.
Источник данных в стиле Avalon создается путем упаковки реализации DBCP.
логика объединения DBCP и конфигурация, найденная в коде excalibur Avalon,
что нужно было для создания интегрированного надежного DataSource
После прочтения объяснения выяснилось, что при установлении соединения DriverManagerDataSource создает новое соединение до тех пор, пока оно есть, а пула соединений вообще нет. Было бы лучше переключиться на следующий пул соединений с открытым исходным кодом.
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" уничтожить-метод="закрыть">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</свойство>
<имя свойства="url">
<value>jdbc:hsqldb:hsql://localhost:9001</value>
</свойство>
<имя свойства="имя пользователя">
<value>са</value>
</свойство>
<имя свойства="пароль">
<значение></значение>
</свойство>
</bean>
Тест пройден и проблема устранена. Если нет поисковой системы, позволяющей найти ответ, проблема не решится так быстро.