Рекомендации для веб-сервера Java

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

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

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

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

Вопросы:

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

  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 МБ, самый простой пакет).

Есть еще комментарии?

Спасибо,

Вальтер

1 ответ

Увидеть

http://javatech.org/2007/11/c3p0-vs-dbcp-the-straight-dope/

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

Другие вопросы по тегам