Запуск JAVA в Windows Intel и Solaris Sparc (T1000)

Привет, я пытаюсь протестировать свое приложение JAVA на Solaris Sparc, и у меня странное поведение. Я не ищу флеймовых войн. Мне просто интересно узнать, что происходит или что не так...

Я запускаю один и тот же JAR на Intel и на T1000, и в то время как на машине с Windows я могу получить 100% (монитор производительности) использование процессора на машине с Solaris, я могу получить только 25% (prstat)

Приложение представляет собой специальное серверное приложение, которое я написал и использует netty в качестве сетевой инфраструктуры.

На машине с Windows я могу получить чуть более 200 запросов/ответов в секунду, включая полную бизнес-логику и доступ к внешним сторонним организациям, в то время как на машине с Solaris я получаю около 150 запросов/ответов при загрузке ЦП всего на 25%.

Можно только представить, сколько еще запросов/ответов я мог бы получить от Sparc, если бы я мог заставить его использовать полную мощность.

Сервера есть...

Windows 2003 SP2 x64bit, 8GB, 2.39Ghz Intel 4 ядра Solaris 10.5 64bit, 8GB, 1Ghz 6 core

Оба используют jdk 1.6u21 соответственно.

Любые идеи?


person user432024    schedule 26.08.2010    source источник


Ответы (3)


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

person Erick Robertson    schedule 26.08.2010
comment
Его сообщение, кажется, указывает на то, что сервер Windows имеет 4-ядерный процессор, а сервер Solaris имеет 6-ядерный процессор. В этом случае приложение должно быть способно использовать как минимум четыре ядра. - person Chris Shouts; 26.08.2010
comment
У T1000 тоже есть гиперпоточность. Он утверждает, что может обрабатывать около 8 задач на ядро, если я правильно понимаю. В этом случае, если бы его приложение использовало 12 потоков, оно запустило бы сервер Windows на 100%, а Solaris на 25%. - person Erick Robertson; 26.08.2010
comment
Да, машина с Windows - это ядро ​​​​Intel 4 - person user432024; 26.08.2010
comment
Просто что-то, что выделялось. Вы прокомментировали в ответе алхимика, что вы настраиваете 2 * ядра процессора для рабочих / селекторных потоков? Попробуйте изменить это на 8 * ядер процессора. В документах T1000, которые я читал, говорится, что он может обрабатывать 8 задач на ядро, и это странно приводит к 25%-му использованию ЦП, о котором вы сообщили. - person Erick Robertson; 26.08.2010
comment
Это зависит от того, какие потоки являются узким местом приложения. Если всем этим потокам-обработчикам для управления ими требуется один из рабочих/селекторных потоков, вы, скорее всего, увидите такое поведение. Убедитесь, что рабочие/селекторные потоки правильно передают работу обработчику, а затем получают другой запрос на передачу другому обработчику и т. д. Убедитесь, что это не блокируется, пока поток обработчика не завершит свою работу. - person Erick Robertson; 27.08.2010
comment
Что ж, это чисто, так что я дам ему право на сомнения. И если бы это было так, то Windows не дошла бы до 100%. Итак, я попробовал 48 рабочих/селекторных потоков и тот же результат. - person user432024; 27.08.2010

Без кода помочь сложно. Некоторые идеи:

  • Профилируйте приложение Java в обеих системах и посмотрите, в чем разница. Вы можете быть удивлены. Поскольку ЦП T1 не выполняет внеочередное выполнение, вы можете увидеть снижение производительности в странных областях.
  • Как говорит Эрик Робертсон, попробуйте увеличить количество потоков до количества виртуальных ядер, сообщаемых через prstat, а НЕ количества обычных ядер. В T1000 используются процессоры UltraSparc T1, которые интенсивно используют параллелизм на уровне потоков. .

Также обратите внимание, что вы используете процессоры Intel последнего поколения и старые процессоры Sun. Я настоятельно рекомендую прочитать Разработка и настройка приложений на UltraSPARC Системы многопоточности на чипах T1 и Максимальное повышение производительности приложений в архитектурах с многопоточностью на чипах (CMT), оба от Sun.

person The Alchemist    schedule 26.08.2010
comment
В состоянии простоя приложение использует 37 потоков. В рабочем состоянии он использует 337. По сути, Netty настраивает 2 * ядра процессора для рабочих/селекторных потоков, и я настроил его на использование 300 потоков обработчика. Так что это 8 потоков + 300 + что-либо еще JVM и спящий режим и все, что когда-либо используется. .. - person user432024; 26.08.2010
comment
Хм... в таком случае я бы настоятельно рекомендовал профилировать, чтобы увидеть узкие места. Если Netty является узким местом, вам просто нужно поиграть с различными параметрами, чтобы получить немного производительности. Если узкое место находится в вашем коде, у вас будет гораздо больше гибкости. Имейте в виду, что загрузка ЦП в prstat не учитывает время ожидания ввода-вывода, которое в веб-приложениях может быть довольно значительным. Короче говоря, я рекомендую профилировать и посмотреть, что занимает так много времени. - person The Alchemist; 27.08.2010
comment
В любом случае, я посмотрел документы, представленные выше. Пока по описаниям ничего сказать не могу. Когда я проверяю статистику, кажется, что используются все потоки процессора. В любом случае лучше всего было бы поговорить с инженером Oracle, но поскольку это единственная машина, которая у меня есть, и она была приобретена у стороннего поставщика, у меня нет пакета поддержки. Так что я думаю, я оставлю это на данный момент. - person user432024; 03.09.2010
comment
@ user432024: Жаль слышать об этом. Разработав многопоточное программное обеспечение для чипов T2, я могу сказать, что настройка производительности может быть немного сложной. Это CMT, а не внеочередной исполнительный чип. Воспользоваться всеми этими ядрами может быть сложно, но в конце концов оно того стоит. Как только вы доведете все ядра до 100%, он полетит. - person The Alchemist; 03.09.2010

Сейчас это довольно старый вопрос, но мы столкнулись с похожими проблемами.

Важно отметить, что SUN T1000 основан на процессоре UltraSpac T1, который имеет только один FPU на 8 ядер. Поэтому, если ваше приложение выполняет много или даже некоторые вычисления с плавающей запятой, это может стать проблемой, поскольку FPU станет узким местом.

person tranber    schedule 17.11.2010
comment
Использует SSL для внешнего подключения, а также использует сертификаты для проверки XML-сообщений. - person user432024; 23.11.2010
comment
Если я правильно понял эту статью (en.wikipedia.org/wiki/SPARC_T4), процессор, который вы имеет только один FPU и одну криптографическую штуку для всех ядер. Если вы часто используете сертификаты/SSL, это может быть узким местом. - person Jens Schauder; 14.05.2012