Рекомендации для веб-сервера Java
В настоящее время я использую DBCP для пула соединений, так как он более или менее снабжен tomcat и прост в настройке. Я подумываю о переходе на Glassfish или Jetty и пока не определилась, какой поставщик пула подключений я буду использовать.
В настоящее время я использую JBoss Seam с Hibernate и до сих пор получаю приличную производительность с этой конфигурацией.
Я видел несколько статей, в которых говорилось, что c3p0 лучше, а некоторые говорили, что proxool лучше, а затем некоторые говорили, что все они в устаревшем состоянии, поэтому dbcp - лучший выбор, так как он более содержательный и содержит документацию.
Сегодня вечером я выполнил тесты JMeter для некоторых ухищрений и обнаружил, что, когда у меня есть 10 одновременно работающих пользователей, заходящих на сайт в произвольном порядке без задержки между запросами страниц, что dbcp не может установить соединение и разрывается. Я разочарован ошибкой, но в остальном доволен производительностью. Я думаю, что я могу немного улучшить производительность с кэшированием 2-го уровня.
Вопросы:
Если я не использую EJB или OSGI, Jetty 7 - явный победитель над Glassfish и Tomcat 6? Это, конечно, намного меньше и, следовательно, должно потреблять меньше ресурсов из коробки. На данный момент я развертываю только одно веб-приложение, а позднее я разверну его.
Какой пул соединений вы рекомендуете для простого сервера приложений? Я не ожидаю, что будет 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 МБ, самый простой пакет).
Есть еще комментарии?
Спасибо,
Вальтер
1 ответ
Увидеть
http://javatech.org/2007/11/c3p0-vs-dbcp-the-straight-dope/
особенно второй комментарий (Даррен Хикс о блокирующем поведении).