Производительность веб-приложений Java в Windows 2003 и Windows 2008

У меня есть приложение Java Web / SIP, работающее на Tomcat. Размер приложения был рассчитан на запуск в Windows 2003 для 1000 одновременных сеансов с 4 ГБ ОЗУ и 4 виртуальных ЦП в виртуализированной среде.

Теперь приложение перенесено на Windows 2008, Tomcat по-прежнему 32-битный, а приложение скомпилировано с 32-битной Java, так же как и 32-битное приложение. С этой настройкой мой перф. test не работает так же, как он используется для работы с Windows 2003. Загрузка процессора достигает пика, и многие вызовы прерываются.

У меня здесь следующие вопросы.

  1. Требует ли запуск 32-битного приложения в среде 64 дополнительных ресурсов ЦП / памяти, что здесь создает проблему.

  2. Есть ли разница в производительности между Win 2003 и Win 2008?

  3. Windows 2008 из-за 64-битной среды требует больше процессора по сравнению с 2003.


person GJ.    schedule 20.03.2012    source источник
comment
Несмотря на отсутствующие знаки, я бы сначала попробовал больше памяти, так как 64-битная система более требовательна к ресурсам. Байт-код Java одинаков для 32- и 64-битной версии, поэтому вы можете попробовать TomCat 7, 64-битную версию с 64-битной Java.   -  person Joop Eggen    schedule 20.03.2012
comment
Добавление дополнительной памяти не оказывает никакого влияния, однако добавление большего количества ЦП влияет на производительность. В состоянии растерянности. Следует ли мне сосредоточиться на своем приложении для оптимизации или жить с тем фактом, что 2008 год потребует больше ресурсов и увеличит ресурсы. Можно ли сосредоточиться на оптимизации Windows 2008 или оптимизации Tomcat для 2008 года? Если да, то где я могу получить за это ответственность?   -  person GJ.    schedule 02.04.2012


Ответы (3)


Когда-то у нас была похожая ситуация, и мы попытались перенести 32-битное приложение (приложение J2EE на основе Tomcat) на 64-битную машину. Мы наблюдаем последствия, с которыми вы сталкиваетесь.

Кстати, вы не упомянули, почему вы перешли на 64-битную ОС :).

Давайте рассмотрим ваши вопросы один за другим

Требуется ли для запуска 32-разрядного приложения в 64-разрядной среде дополнительный ЦП / память, что здесь создает проблему.

В общем да. Но это также зависит от архитектуры вашего процессора. Чтобы понять это, посмотрите, как Windows запускает 32-битное приложение на 64-битной машине. В 64-битной ОС есть подсистема под названием WoW64 (32-битная Windows в Windows 64-битная)

В основном это делается в WoW64.

  1. Эмуляция 32-битной инструкции. Это очень затратно с точки зрения вычислений и, вероятно, является причиной резкого скачка загрузки ЦП. Обычно это происходит при использовании процессоров Intel Itanium (IA-64).

  2. Переключение процессора в 32-битный режим из 64-битного режима. Здесь, когда требуется выполнить 32-битный поток приложения, процессор переключается в 32-разрядный режим (режим совместимости), а затем переключается обратно в 64-битный режим. Это относительно быстрее, чем предыдущий механизм эмуляции.

Есть ли разница в производительности между Win 2003 и Win 2008?

Это очень субъективно. Это зависит от того, какое оборудование вы используете. Даже если у вас 64-разрядная ОС и оборудование, многое зависит от типа оборудования, процессора материнской платы и т. Д. 64-разрядная ОС предназначена для использования превосходного оборудования, которое 32-разрядная ОС и машина не могут в силу ограничения, такие как адресное пространство и т. д.

Windows 2008 из-за 64-битной среды требует больше ЦП по сравнению с 2003?

да. как упоминалось выше в @EJP, у него есть еще что предложить. Для более производительной ОС потребуется более качественное оборудование. Возможно, ваше конкретное приложение может нуждаться или не нуждаться в каких-либо специфических функциях Win 2008. Вот почему вам нужно позвонить и узнать, почему вам нужно перейти на 64-разрядную версию с 32-разрядной. Вот похожий пост на том же форуме.

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

person Santosh    schedule 04.04.2012

  1. Не особенно.
  2. да. Иногда это очень важно. Я вижу всевозможные задержки в программах, которые раньше работали с большой скоростью.
  3. Да, но не из-за 64 битов, а просто потому, что в них больше.
person user207421    schedule 20.03.2012
comment
Спасибо за вводные данные, не могли бы вы предоставить мне некоторые данные, чтобы доказать пункт 2, какую-то матрицу сравнения или что-то в этом роде. Также кто здесь главный виновник, пожирающий процессор. 1. 64-битная архитектура. 2. Windows 2008, которая сейчас работает, может быть дополнительным инструментом для поддержки ОС. 3. Tomcat 5.5.33, 32-битное приложение. и работает на 64-битной ОС. 4. 32-битная JRE, работающая на 64-битной среде env. 5. Мое приложение. Я вижу снижение производительности на 20-25% после перехода на Windows 2008, мне нужны надежные данные, чтобы доказать необходимость дополнительных ресурсов в среде виртуальных машин. - person GJ.; 21.03.2012

Я думаю, ваша предыдущая установка приложения SIP и Java была оптимизирована, а новая - еще нет. Нет различий в производительности для сети и Java между последним SP для Windows 2003 и последним SP для 2008 (на базе Vista), однако Win 2008 R2 быстрее работает с Java из-за более интеллектуальной привязки ЦП, которая работает даже в виртуальной машине. В принципе, я бы посмотрел на вашу java, убедитесь, что вы используете 64-битную java, если можете, что она работает с переключателем "-server" и что у вашего сборщика мусора есть параметры, например -XX: + UseConcMarkSweepGC -XX: + UseParNewGC -XX: NewSize = 128m, также проверьте java-опции, установленные JAVA_OPTS = -Xmx3000M -server.

Также убедитесь, что у вас установлена ​​последняя версия Java, вы обновили Windows в своей системе, включая драйверы, а также обновили программное обеспечение визуализации, BIOS, BMC, а также прошивку хранилища.

И в конце, просто проверьте диспетчер задач, действительно ли java достигает пика, что ваше LAN-соединение (ping) не отбрасывает пакеты и что у вас отключено управление питанием в BIOS машины.

Я бы порекомендовал вам перейти на Win 2008 R2 - Win 7 на базе.

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

person Andrew    schedule 08.04.2012
comment
пс. а если это сетевое приложение, увеличьте буферы на сетевом порту, на хосте виртуальной машины и гостевой системе - это действительно помогает, и если вы можете, используйте ссылку 10 Гбит / с, а если она все еще не работает, просто предоставьте более подробную информацию о вашей настройке. - person Andrew; 09.04.2012