А> Да писал , иначе не говорил бы , нет смысла делать протокол межу клиентом и сервером слишком сложным (а речь как я понял именно об этом) , хотя А> зависит от задачи конешно.
Задачи имеют тенденцию к усложнению. Это раз. Во-вторых трудоемкость резко возрастает. К тому же квалификация программиста, который должен писать разбор ХМЛ на САКС должна быть выше средней. В итоге в реальных проектах САКС практически не используют.
Потом. Мы ведь к тому же умолчали о том, что нагрузка на каналы в случае использования ХМЛ в качестве формата данных увеличивается в 3-5 раз. К тому же, если мы используем веб-сервисы это еще одно кратное увеличение требований к каналам.
В итоге по сравнению с бинарными форматами увеличение нагрузки на каналы просто убийственное. Причем особого выигрыша по сравнению с тем же RMI в простоте мы не получаем (я говорю про жаба-жаба).
Потом. У нас кроме разбора ХМЛ в бизнес-приложении будет еще и разбор ХМЛ, который есть вызов веб-сервиса. А там, я почти уверен (поправьте меня если ошибаюсь) — дом-модель со всеми ее тормозами и дикими требованиями к памяти.
_>>А Вы писали разборщики XML используя SAX? Если ХМЛ более-менее сложный это чрезвычайно трудоемкое занятие. Так что можно с чистой совестью говорить о том, что SAX-а для разработчиков бизнес-систем нет.
_>>>>Если нужна производительность — нужно избавляться от XML и ВебСервисов. Другого пути нет.
... << RSDN@Home 1.2.0 alpha rev. 787>>
Re[2]: Web Service и производительность. Help. Что делать ?
Здравствуйте, Cyberax, Вы писали:
C>Профилируйте и ищите где блокируется.
Профилировать можно только под тестовой нагрузкой, а для этого нужно сначала ситуацию повторить на тестах. Проще начать с того чтобы снять дамп потоков и посмотреть, возможно большинство из них как раз застрали в бутылочном горлышке над оптимизацией которого стоит подумать.
Re[4]: Web Service и производительность. Help. Что делать ?
Здравствуйте, denis_krg, Вы писали:
_>А Вы писали разборщики XML используя SAX? Если ХМЛ более-менее сложный это чрезвычайно трудоемкое занятие. Так что можно с чистой совестью говорить о том, что SAX-а для разработчиков бизнес-систем нет.
Для SAX, как и для DOM, существует ряд достаточно удобных оберток.
Re[5]: Web Service и производительность. Help. Что делать ?
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, denis_krg, Вы писали:
_>>А Вы писали разборщики XML используя SAX? Если ХМЛ более-менее сложный это чрезвычайно трудоемкое занятие. Так что можно с чистой совестью говорить о том, что SAX-а для разработчиков бизнес-систем нет.
B>Для SAX, как и для DOM, существует ряд достаточно удобных оберток.
Это никак не отменяет высокой ресурсоемкости обработки ХМЛ (((
Да, для САКСа — какие?
... << RSDN@Home 1.2.0 alpha rev. 787>>
Re[6]: Web Service и производительность. Help. Что делать ?
Здравствуйте, denis_krg, Вы писали:
_>Это никак не отменяет высокой ресурсоемкости обработки ХМЛ (((
Это никак не отменяет того факта что с XML можно построить решение достаточно высокой производительности.
Предлагаю словоблудие на этом закрыть.
_>Да, для САКСа — какие?
Для разбора взять хотя бы Apache Digester.
Re[3]: Web Service и производительность. Help. Что делать ?
Здравствуйте, xserge, Вы писали:
C>>Профилируйте и ищите где блокируется. X>В коде нет блокировок, такой вариант не рассматривался и никак специально не программировался. Что то есть сомнения на счёт блокировок в базе. Пул соединений вообще никак не настраивался.
Самый тупой вопрос — а пул соединений у вас не заканчивается, случайно?
X>Веб сервис полностью синхронный. X>асинхронность не реализована ((( X>Её реализация может как то помочь ?
Нет.
Sapienti sat!
Re[4]: Web Service и производительность. Help. Что делать ?
Здравствуйте, Cyberax, Вы писали:
C>Самый тупой вопрос — а пул соединений у вас не заканчивается, случайно?
Почему тупой? Судя по картнике имено пул и заканчивается. Либо потоков, либо соединений. Все потоки активные, ни одного в ожидании.
Re[6]: Web Service и производительность. Help. Что делать ?
Здравствуйте, denis_krg, Вы писали:
_>Задачи имеют тенденцию к усложнению. Это раз. Во-вторых трудоемкость резко возрастает. К тому же квалификация программиста, который должен писать разбор ХМЛ на САКС должна быть выше средней. В итоге в реальных проектах САКС практически не используют.
_>Потом. Мы ведь к тому же умолчали о том, что нагрузка на каналы в случае использования ХМЛ в качестве формата данных увеличивается в 3-5 раз. К тому же, если мы используем веб-сервисы это еще одно кратное увеличение требований к каналам.
_>В итоге по сравнению с бинарными форматами увеличение нагрузки на каналы просто убийственное. Причем особого выигрыша по сравнению с тем же RMI в простоте мы не получаем (я говорю про жаба-жаба).
_>Потом. У нас кроме разбора ХМЛ в бизнес-приложении будет еще и разбор ХМЛ, который есть вызов веб-сервиса. А там, я почти уверен (поправьте меня если ошибаюсь) — дом-модель со всеми ее тормозами и дикими требованиями к памяти.
Ошибатесь. SAX парсеры наоборот DOM модель не грузят целиком в память, а работают на событийном принципе, поэтому они в разы быстрее и экономней чем DOM-парсеры при разборе большого объема данных. Маленькие объемы проще DOM-ом разобрать: во-первых быстрее, во-вторых проще.
_>>>А Вы писали разборщики XML используя SAX? Если ХМЛ более-менее сложный это чрезвычайно трудоемкое занятие. Так что можно с чистой совестью говорить о том, что SAX-а для разработчиков бизнес-систем нет.
_>>>>>Если нужна производительность — нужно избавляться от XML и ВебСервисов. Другого пути нет.
Мы ж не в каменном веке живём. Есть XStream, котоорый сериализует любой объект вызовом одного метода, toXML(Object obj). Умеет юзать аннотации (свои).
Есть тулза, которая называется JAXB 2.0, построенная на сановской спеке. Она даже с XFire интегрируется путём прописывания одной строчки в конфиге. РАзбирает всё аннтациями. Так что не обязательно писать SAX-парсер, если уж вы не разбираете какой-то мегакривой xml.
Re[4]: Web Service и производительность. Help. Что делать ?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, xserge, Вы писали:
C>>>Профилируйте и ищите где блокируется. X>>В коде нет блокировок, такой вариант не рассматривался и никак специально не программировался. Что то есть сомнения на счёт блокировок в базе. Пул соединений вообще никак не настраивался. C>Самый тупой вопрос — а пул соединений у вас не заканчивается, случайно?
X>>Веб сервис полностью синхронный. X>>асинхронность не реализована ((( X>>Её реализация может как то помочь ? C>Нет.
Возможно что и закончился, где бы его в веблоджике можно увеличить ?
Re[5]: Web Service и производительность. Help. Что делать ?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, xserge, Вы писали:
X>>Имеется 80 тысяч пользователей, каждый в течении 5 минут должен обратиться к Web Service исполняемому на Weblogic 9.2.1 и получить результаты своего запроса. У каждого пользователя запущен агент написанный на VC++ который с периодичностью и обращается к веб сервису. X>>Проблема в том что сервер вешается в таком режиме работы. По-видимому по-причине большого количества запускающихся параллельных потоков. C>Похоже на starvation какого-то ресурса: блокировки где-то в коде, пула соединений к базе, какого-нибудь кэша и т.п.
C>Профилируйте и ищите где блокируется.
Подскажите пожалуйста, а чем можно попрофилировать приложение запущенное под WebLogic-ом ?
Re[6]: Web Service и производительность. Help. Что делать ?
Здравствуйте, xserge, Вы писали:
X>>Возможно что и закончился, где бы его в веблоджике можно увеличить ? X>Возможно вы имеете ввиду JDBC Connection pool ?
Блокировка могла произойти на любом из пулов. Но скорее всего именно в Thread pool для HTTP сервлетов.
Re[6]: Web Service и производительность. Help. Что делать ?
Здравствуйте, xserge, Вы писали:
X>>Возможно что и закончился, где бы его в веблоджике можно увеличить ? X>Возможно вы имеете ввиду JDBC Connection pool ?
Пулов, вообще говоря, в типичном сервере несколько: пул JDBC-соединений, пул потоков для сервлетов/JSP, пул потоков для EJB-бинов, пул самих EJB-бинов.
Кончиться может любой из них, надо смотреть в консоли управления WebLogic'ом. Я точно помню, что там всё это есть.
Sapienti sat!
Re[7]: Web Service и производительность. Help. Что делать ?
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, denis_krg, Вы писали:
_>>Это никак не отменяет высокой ресурсоемкости обработки ХМЛ ((( B>Это никак не отменяет того факта что с XML можно построить решение достаточно высокой производительности. B>Предлагаю словоблудие на этом закрыть.
Ну все, запинали. А что вы будете делать с трафиком? Как от объемов ХМЛ избавиться?
_>>Да, для САКСа — какие? B>Для разбора взять хотя бы Apache Digester.
... << RSDN@Home 1.2.0 alpha rev. 787>>
Re[8]: Web Service и производительность. Help. Что делать ?
Здравствуйте, denis_krg, Вы писали:
_>Ну все, запинали. А что вы будете делать с трафиком? Как от объемов ХМЛ избавиться?
gzip'ом его на уровне HTTP.
Никто не спорит что работа с XML излишне нагружает CPU и сетевой канал. Но это никак не отменяет того факта что достаточная производительность достижима и с XML based протоколами.
Re[2]: Web Service и производительность. Help. Что делать ?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, xserge, Вы писали:
X>>Имеется 80 тысяч пользователей, каждый в течении 5 минут должен обратиться к Web Service исполняемому на Weblogic 9.2.1 и получить результаты своего запроса. У каждого пользователя запущен агент написанный на VC++ который с периодичностью и обращается к веб сервису. X>>Проблема в том что сервер вешается в таком режиме работы. По-видимому по-причине большого количества запускающихся параллельных потоков. C>Похоже на starvation какого-то ресурса: блокировки где-то в коде, пула соединений к базе, какого-нибудь кэша и т.п.
C>Профилируйте и ищите где блокируется.
Подскажите плиз, чем можно профилировать ? Желательно либо бесплатный профайлер или с креком
Re: Web Service и производительность. Help. Что делать ?
причины могут быть вообще не предсказуемые
— включенный debug
— возможно кривой код
повсеместное использование synchronized в коде (возможно перейти на ReadWriteLock, посмотрите на java.util.concurrent)
напишите лоад тесты сначала на тот код который используется сервисами, перед тем как гнать на транспорт...
— тюнинг java машины
мы например у себя нашли наиболее оптимальную конфигурацию своего продукта с опциями
set JVM_OPTS=-ea -XX:MaxPermSize=128m -XX:+UseParNewGC -XX:MaxNewSize=32m -XX:NewSize=32m -Xms256m -Xmx512m -XX:SurvivorRatio=128 -XX:MaxTenuringThreshold=0 -XX:+UseTLAB -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
удачи
Здравствуйте, xserge, Вы писали:
X>Подскажите пожалуйста какие варианты решения данной проблемы могут быть ? Приветствуются любые идеи.