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

Параметры Apache / Tomcat

У меня средний сервер на EC2. Я не так много знаю об Apache или Tomcat - они уже работают, но кроме этого у меня нет глубоких знаний о том, как возиться. Я знаю, что могу установить минимальный / максимальный размер JVM для Tomcat Server, и что я могу установить, сколько потоков Apache может отключать, но я не знаю, какие «разумные» значения для этих параметров.

  1. Я понимаю, что ответ субъективен, но есть ли общие настройки, с которых мне следует начать?
  2. Есть ли простой способ загрузить / проверить производительность моего приложения?

Спасибо.

РЕДАКТИРОВАТЬ:

Система является средой EC2:

Экземпляр с высокой загрузкой ЦП:

Единственные службы, которые я использую, - это Apache и Tomcat. Больше ничего на сервере нет.

Apache

Ознакомьтесь с собственной документацией Apache, она более подробна, чем я мог бы здесь:

http://httpd.apache.org/docs/2.0/misc/perf-tuning.html

JVM

Установите для Xmx вашей JVM значение не более 70% (примерно) от общей свободной физической памяти. Причина этого в том, что библиотеки perm gen и JVM также занимают дополнительное место - цель состоит в том, чтобы общая память процесса никогда не использовала виртуальную память / память подкачки. Если вы установите слишком высокое значение, вы начнете видеть такие проблемы, как «Превышен предел накладных расходов GC».

Ваш алгоритм GC может иметь большое влияние на производительность - убедитесь, что вы используете какую-либо форму параллельного сборщика, а не последовательную «паузу, отметку и очистку». JVM обычно делает это автоматически в -server Режим.

Используйте такой инструмент, как JConsole или JVisual VM, чтобы проверить сборщик мусора и сколько кучи вы фактически используете, и отрегулируйте его до нужного размера - слишком большая куча может повлиять на время сборки мусора.

Кот

Что касается потоков HTTP-коннектора, в одном экземпляре Tomcat, в зависимости от вашего приложения, вы обычно можете увеличить количество потоков примерно до 600, прежде чем возникнут проблемы - однако часто нет необходимости в том, чтобы оно было настолько большим - вы просто будете увеличивая нагрузку на ваш процессор и память.

Когда вы довольны максимальным количеством потоков, я устанавливаю minSpareThreads и maxSpareThreads относительно этого. Повышение значений, если я знаю, что у меня будут всплески новых подключений и т. Д.

Следующий acceptCount. Это максимальное количество подключений в очереди - соединения, которые выходят за пределы этого параметра после использования потоков соединителя, получат сообщение «В соединении отказано».

В качестве незначительной настройки вы можете установить enableLookups (разрешить поиск имени хоста DNS) в false. Когда включено, (незначительно) отрицательно влияет на производительность.

Кроме того, ознакомьтесь с собственной библиотекой Tomcat, в ней используется собственный код для повышения производительности при выполнении определенных операций (например, файлового ввода-вывода и т. Д.).

Нагрузочное тестирование

Для базового тестирования нагрузки / производительности ознакомьтесь с Apache JMeter:

http://jakarta.apache.org/jmeter/

Мы используем его для тестирования производительности базовой загрузки страницы с тестовыми скриптами JMeter, использующими сотни одновременных запросов. Однако для его запуска вам понадобится довольно здоровенный сервер (не на том же компьютере, на котором вы используете Apache HTTPD и Tomcat).

Куча, я бы изначально установил ms = mx = 1GB. 1.5, если ваше приложение требует памяти. Я никогда не видел смысла (или выигрыша) в наличии переменного размера кучи в серверной среде.

Размер пула потоков - это отдельная глава. В первую очередь я говорю о Tomcat.

Если в вашем приложении много синхронизированных разделов (общие кеши, внешние ресурсы / интеграции только с последовательным доступом и еще много чего), рабочие потоки имеют убывающую отдачу, поскольку чем их больше, тем больше времени они будут тратить, просто ожидая друг друга. С вашими спецификациями и ничего не зная о вашем приложении, я скажу 50 в качестве отправной точки с точки зрения размера пула потоков. Вам нужно будет запустить несколько тестов производительности, чтобы правильно настроить это. Например, используйте jmeter и создайте тестовый сценарий, который имитирует один или несколько основных вариантов использования на вашем сайте. Используйте 2 или 3 временных экземпляра EC2 в качестве генераторов нагрузки (они понадобятся вам только на короткое время), где вы запускаете приложение jmeter-server.

Запустите тестовые сценарии с перестановками, например, 60, 120, 180 и 240 потоков запросов jmeter и 30, 50, 70 и 90 рабочих потоков tomcat. Сравните время отклика и использование ЦП и памяти на вашем сервере. Для получения базовой информации о процессоре / памяти вы можете использовать стандартную информацию jconsole или visualvm вне вашей JVM. Вы также можете запустить JVM Tomcat с подробной сборкой мусора (ведение журнала GC) и изучить память и поведение GC с помощью чего-то вроде tagtraums GC просмотрщик.

разумное начальное значение - 25% нового размера (Xms) по сравнению с общим размером кучи (Xmx)

Я предлагаю вам затем профилировать свое приложение - на основе пиковой нагрузки и наблюдать за использованием памяти с помощью LambdaProbe или аналогичного и посмотреть, что вам нужно изменить.