Подходящие параметры запуска Tomcat 5.5 для настройки JVM для чрезвычайно требовательного веб-приложения с большой кучей? - PullRequest
11 голосов
/ 14 октября 2008

Недавно мы перенесли большое веб-приложение с высоким спросом на Tomcat 5.5 из Tomcat 4 и заметили некоторые специфические замедления, которые, по-видимому, связаны с паузами JVM. Чтобы запустить наше приложение и поддерживать повышенную нагрузку на Tomcat 4 с течением времени, многие нестандартные параметры JVM были установлены и настроены в соответствии с приведенным ниже описанием, и я надеюсь, что кто-то, имеющий опыт настройки Tomcat JVM, сможет прокомментировать все, что может быть вредным установить Tomcat 5.5. Также обратите внимание, что некоторые из них могут быть перенесены из предыдущих версий Java (в течение некоторого времени мы успешно запускали Tomcat 4 на Java 1.6 с этими параметрами, но некоторые могли быть введены для помощи в сборке мусора на Java 1.4, которая была основой наш Tomcat 4 устанавливается долгое время, и теперь может принести больше вреда, чем пользы).

Некоторые заметки:

  • Объем памяти приложения составляет около 1 ГБ, возможно, немного больше.
  • Процессор не проблема - все машины обслуживающих приложение (с балансировкой нагрузки) <30% CPU </li>
  • Большой запас физической памяти на машинах.
  • -XX: MaxPermSize = 512m был единственным параметром, добавленным в рамках обновления 5.5, и он реагировал на проблему нехватки памяти в пермгене (которую он решил).
  • Работает на Java 1.6, ОС Solaris

-сервер -Xms1280m -Xmx1280m -XX: MaxPermSize = 512m -XX: ParallelGCThreads = 20 -XX: + UseConcMarkSweepGC -XX: + UseParNewGC -XX: SurvivorRatio = 8 -XX: Порог_Тороговое значение :XRURTURSURT XX: + AggressiveOpts -XX: + PrintGCDetails -XX: + PrintGCTimeStamps -XX: -TraceClassUnloading -Dsun.io.useCanonCaches = false -Dsun.net.client.defaultConnectTimeout = 60000 -Dsun.net.client.defaultReadTime7out

Ответы [ 5 ]

7 голосов
/ 15 октября 2008

Один из чемпионов Java, блог Кирка Пеппердина: http://kirk.blog -city.com / how_to_cripple_gc_ergonomics.htm .
Цитата 1 «Документация GC расскажет вам, на что влияет настройка, но часто не сообщая, каков будет эффект. Самая большая подсказка, что вы выбрали неправильный развил на дороге, - это когда вы явно устанавливаете значение и затем подсказываете эргономике GC. Другая подсказка - если у вас нет веской причины для настройки параметра. И только потому, что некоторые так называемые эксперты говорят, что этот параметр работает лучше всего, это только шум, а не звук и, конечно, не причина. "

Цитата 2 «Как я уже говорил в предыдущей записи в блоге, не трогайте ручки, если у вас нет веских причин для этого. Если вам нужно дотронуться до ручек, слегка используйте только те, которые помогают эргономике, а не те, которые прикалывают все сводит на нет эргономические возможности, позволяющие удовлетворить ваши потребности в паузе и производительности. "

Итак, я бы предложил вам вернуться на равнину
-server -Xms1280m -Xmx1280m -XX: MaxPermSize = 512m -XX: + UseConcMarkSweepGC -XX: + PrintGCDetails -XX: + PrintGCTimeStamps -XX: -TraceClassUnloading -Dsun.io.useCanonCun.net.conf = 600D -Dsun.net.client.defaultReadTimeout = 60000

Найдите, если это даст вам лучшую производительность. Если да, придерживайтесь этого
Кстати, -XX: MaxPermSize = 378m есть какие-либо проблемы?
Java 1.6 имеет гораздо лучшую эргономику, чем 1.4. Вы можете настроить его менее чем на 1,4
Кстати, вы пробовали Tomcat 6? Tomcat 6 работает на Java 6 намного лучше, чем Tomcat 5.5.

P.S: Я уже некоторое время пользуюсь Tomcat и обычно пытаюсь дать JDK от Sun бесплатное правление с небольшими настройками тут и там.

4 голосов
/ 15 октября 2008

только что нашел вебинар от разработчиков Tomcat по настройке Tomcat: http://springsource.com/node/555. продолжение вебинара: http://blog.springsource.com/2008/10/14/optimising-and-tuning-apache-tomcat-part-2/

BR
~ A

3 голосов
/ 14 октября 2008

Как кто-то, кто также занимается этим, у меня, конечно, нет никаких окончательных ответов, особенно с учетом того, насколько специфичны приложения такого рода вещи. Хорошая ссылка, которую вы, вероятно, видели, здесь:

http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

Однако, это довольно длинный список параметров jvm, что говорит о том, что, вероятно, установлены ненужные параметры, особенно если учесть, что у вас есть несколько параметров отладки (PrintGCDetails, PrintGCTimeStamps, TraceClassUnloading), которые не могут быть полезны в рабочем приложении. 60 секундные тайм-ауты также могут израсходовать ресурсы. «сервер» по умолчанию, но не причинит никакого вреда.

Как приложение работает с минимальными параметрами настройки (размер jvm, MaxPermSize)?

1 голос
/ 15 октября 2008

Вы также можете взглянуть на изменение минимального / максимального количества потоков, которые Tomcat будет использовать для обработки запросов в conf/server.xml:

<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" ...

Одно практическое правило, которое я слышал в предыдущей работе, состояло в том, что maxThreads должен быть равен количеству одновременных соединений, которые вы ожидаете обработать. Я не уверен, насколько научна эта претензия, хотя, конечно, думаю, что это имеет смысл, поскольку вы не хотите, чтобы клиенты блокировались в ожидании освобождения потока для обработки их запроса.

0 голосов
/ 15 октября 2008

Возможно, стоит поэкспериментировать с альтернативной JVM (например, JRockit), чтобы проверить, хорошо ли подходят различия в модели сборки мусора для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...