Соответствующие параметры запуска 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
Ответы
Ответ 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 свободное правление с небольшой настройкой здесь и там.
Ответ 2
только что нашел вебинар от разработчиков tomcat по настройке tomcat: http://springsource.com/node/555. продолжение веб-семинара: http://blog.springsource.com/2008/10/14/optimising-and-tuning-apache-tomcat-part-2/
BR,
~ А
Ответ 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), чтобы увидеть, хорошо ли подходят для вашей модели различия в модели сбора мусора.