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

Рекомендации для Java Web Server

В настоящее время я использую DBCP для пула соединений, поскольку он более или менее снабжен tomcat и прост в настройке. Я подумываю о переходе на Glassfish или Jetty и еще не определил, какого поставщика пула подключений я буду использовать.

В настоящее время я использую JBoss Seam с Hibernate и до сих пор получаю приличную производительность с этой конфигурацией.

Я видел несколько статей, в которых говорилось, что c3p0 лучше, и некоторые говорят, что proxool лучше, а некоторые говорят, что все они находятся в устаревшем состоянии, поэтому dbcp - лучший выбор, поскольку он более обслуживается и имеет документацию.

Сегодня вечером я провел тесты JMeter и обнаружил, что когда у меня есть 10 одновременных пользователей, заходящих на сайт в любом случайном порядке, без задержки между запросами страниц, dbcp не может установить соединение и взрывается. Я разочарован ошибкой, но в остальном доволен производительностью. Я думаю, что могу немного улучшить производительность с помощью кеширования 2-го уровня.

Вопросы:

  1. Если я не использую EJB или OSGI, является ли Jetty 7 явным победителем над Glassfish и tomcat 6? Он, безусловно, намного меньше и, следовательно, должен потреблять меньше ресурсов из коробки. На данный момент я развертываю только 1 веб-приложение, позже я разверну еще.

  2. Какой пул соединений вы рекомендуете для простого сервера приложений? Я не ожидаю наличия 10 одновременных пользователей без задержки между запросами, но приятно знать, что приложение может обработать до того, как оно взорвется, и что оно делает, когда достигает этой точки.

  3. Наконец, ошибка «Невозможно получить соединение» обычно указывает на то, что запрос выполняется слишком долго и, следовательно, это соединение не может быть возвращено в пул. Какие еще области вы бы проверили, кроме обеспечения эффективного выполнения всех запросов?

Исключение:

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/

особенно второй комментарий (комментарий Даррена Хикса о блокирующем поведении).