Подтвердить что ты не робот

Соответствующие параметры запуска Tomcat 5.5 для настройки JVM для чрезвычайно высокого спроса, большое приложение для кучи?

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

Некоторые примечания:

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

-server -Xms1280m -Xmx1280m -XX: MaxPermSize = 512m -XX: ParallelGCThreads = 20 -XX: + UseConcMarkSweepGC -XX: + UseParNewGC -XX: SurvivorRatio = 8 -XX: TargetSurvivorRatio = 75 -XX: MaxTenuringThreshold = 0 - XX: + AggressiveOpts -XX: + PrintGCDetails -XX: + PrintGCTimeStamps -XX: -TraceClassUnloading -Dsun.io.useCanonCaches = false -Dsun.net.client.defaultConnectTimeout = 60000 -Dsun.net.client.defaultReadTimeout = 60000

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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