В настоящее время я использую DBCP для пула соединений, поскольку он более или менее снабжен tomcat и прост в настройке. Я подумываю о переходе на Glassfish или Jetty и еще не определил, какого поставщика пула подключений я буду использовать.
В настоящее время я использую JBoss Seam с Hibernate и до сих пор получаю приличную производительность с этой конфигурацией.
Я видел несколько статей, в которых говорилось, что c3p0 лучше, и некоторые говорят, что proxool лучше, а некоторые говорят, что все они находятся в устаревшем состоянии, поэтому dbcp - лучший выбор, поскольку он более обслуживается и имеет документацию.
Сегодня вечером я провел тесты JMeter и обнаружил, что когда у меня есть 10 одновременных пользователей, заходящих на сайт в любом случайном порядке, без задержки между запросами страниц, dbcp не может установить соединение и взрывается. Я разочарован ошибкой, но в остальном доволен производительностью. Я думаю, что могу немного улучшить производительность с помощью кеширования 2-го уровня.
Вопросы:
Если я не использую EJB или OSGI, является ли Jetty 7 явным победителем над Glassfish и tomcat 6? Он, безусловно, намного меньше и, следовательно, должен потреблять меньше ресурсов из коробки. На данный момент я развертываю только 1 веб-приложение, позже я разверну еще.
Какой пул соединений вы рекомендуете для простого сервера приложений? Я не ожидаю наличия 10 одновременных пользователей без задержки между запросами, но приятно знать, что приложение может обработать до того, как оно взорвется, и что оно делает, когда достигает этой точки.
Наконец, ошибка «Невозможно получить соединение» обычно указывает на то, что запрос выполняется слишком долго и, следовательно, это соединение не может быть возвращено в пул. Какие еще области вы бы проверили, кроме обеспечения эффективного выполнения всех запросов?
Исключение:
00:38:38,886 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: null
00:38:38,898 ERROR [JDBCExceptionReporter] Already closed.
00:38:46,823 INFO [DefaultLoadEventListener] Error performing load command
org.hibernate.SessionException: Session is closed!
Мое среднее время отклика составляет 300 мс, минимум 100 мс, максимум 5 с и стандартное отклонение 300 мс. Это базовый сервер Linode (оперативная память 360 МБ, простейший пакет).
Есть другие комментарии?
Спасибо,
Уолтер
Видеть
http://javatech.org/2007/11/c3p0-vs-dbcp-the-straight-dope/
особенно второй комментарий (комментарий Даррена Хикса о блокирующем поведении).