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

Настройка Java-приложения Tomcat с помощью обратного прокси-сервера Apache и Postgresql

Похоже, мой обратный прокси-сервер apache может действовать как узкое место и ограничивать количество запросов, которые могут делать пользователи.

Я запускаю Apache и Tomcat на server1, который имеет 96 ГБ ОЗУ, rhel5 x64, 24 ядра. Довольно мускулистый.

База данных Postgresql работает на сервере server2, с оперативной памятью 50 ГБ, rhel5 x64, 24 ядрами.

Tomcat настроен на использование оперативной памяти 60 ГБ (я могу увеличивать и уменьшать это по мере необходимости). Я обрабатываю сотни обращений в минуту (как от пользователей, так и от удаленных вызовов API), и похоже, что Apache не успевает.

Какие настройки я должен увеличить в httpd.conf, чтобы он мог убедиться в дополнительной памяти? Я также читал, что количество потоков в apache напрямую коррелирует с потоками базы данных. Мой сервер postgres определенно мощный и не использует свой потенциал, но я не хочу увеличивать один за счет другого. Итак, как мне определить правильные настройки для обоих?

Apache обрабатывает мой SSL, обслуживая 443. Tomcat имеет коннектор с портом 8080.

Стоит ли увеличивать количество рабочих для apache? Или дать им больше памяти?

Вы только догадываетесь. Вы увеличили максимальное количество подключений на Tomcat и Apache? Увеличили ли вы количество подключений в пуле подключений к базе данных приложений Tomcat и максимальное количество подключений в PostgreSQL? Попробуйте увеличить эти 4 значения и посмотрите, что произойдет.

Также Tomcat с оперативной памятью 60 ГБ - не лучшая идея. Время от времени каждый сборщик мусора Java (не имеет значения, какой из них) останавливает мир. Время этой паузы пропорционально количеству плунжера. В это время ваша система не будет отвечать на запросы. С оперативной памятью 60 ГБ эта пауза может длиться до 60 секунд. Попробуйте создать несколько меньших экземпляров Tomcat и используйте балансировку нагрузки mod_jk.

Удачи

Включите ведение журнала GG на сервере Tomcat и следите за использованием памяти. Я стремлюсь к новому поколению GC каждые 10-15 секунд. Для онлайн-приложения вы можете рассмотреть возможность использования параллельного GC. Я стремлюсь к сборке мусора старого поколения каждые час или два, чаще, если время остановки приложения слишком велико.

Я был бы удивлен, если Apache не справится с нагрузкой. Следите за количеством активных подключений. Если у вас заканчивается, возможно, вам потребуется увеличить количество дочерних элементов и / или количество подключений на каждого ребенка. HTTP 1.1 может увеличить количество необходимых подключений. Если вы увеличили время ожидания сохранения активности, подумайте о его сокращении.