У меня средний сервер на EC2. Я не так много знаю об Apache или Tomcat - они уже работают, но кроме этого у меня нет глубоких знаний о том, как возиться. Я знаю, что могу установить минимальный / максимальный размер JVM для Tomcat Server, и что я могу установить, сколько потоков Apache может отключать, но я не знаю, какие «разумные» значения для этих параметров.
Спасибо.
РЕДАКТИРОВАТЬ:
Система является средой 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 или аналогичного и посмотреть, что вам нужно изменить.