"0." Приложение написано на Javascript..
Честно - немного не догоняю. Может быть, все-таки клиенсткая часть на JS, а серверная - на JAVA? (jsp какой-нибудь)? Как осуществляется выдача сервером страниц по вашему запросу?
installService.bat (всё содержимое):
JavaService.exe -install dform %JAVA_HOME%\jre\bin\server\jvm.dll -Duser.home=%DFORM_PREFS_HOME% -Djava.class.path=%JBOSS_HOME%\bin\run.jar;%JAVA_HOME%\lib\tools.jar; -XX:MaxPermSize=128m -Xmx512m -start org.jboss.Main -params start -stop org.jboss.Main -params stop -method systemExit -err %JBOSS_HOME%\bin\stderr.txt
Кажется, это установка JBoss как сервиса (тогда его можно будет запускать из консоли управления в разделе "Службы и сервисы виндовз". Если вы запускаете его как службу винды, то имеет смысл передать ему параметры -Xmx и -Xms через свойства его службы
Run.bat
…
set JAVA_OPTS=%JAVA_OPTS% -Xms64m -Xmx1024m -Xss2m -Djava.io.tmpdir=%DIRNAME%\server\default\tmpjetty
…
Run.conf
#
# Specify options to pass to the Java VM.
#
#JAVA_OPTS="-server -Xms128m -Xmx512m"
Run.ch
#Memory Usage
JAVA_OPTS="$JAVA_OPTS -Xms96m -Xmx128m -Djava.io.tmpdir=$JBOSS_HOME/server/default/jettytemp"
Это уже ближе, как мне кажется, к истине. Так, если вы стартуете сервер именно запуская этот скрипт, то имеет смысл копаться в нем. Не очень себе представляю, в каком порядке обрабатываются файлы на старте, поэтому я бы установил в них всех параметры -Xms=-Xmx=512m (то есть минимальный стартовый равен максимальному и 512 -для вашей машинки это потолок, у вас всего чуть больше 700 Мб)
Мои комментарии: не знаю сколько нужно выделять памяти для приложения, но разброс Xms,Xmx-параметров напоминает кашу.
Возможно, во всем этом есть смысл: сервис устанавливается с одними параметрами, запуск с помощью скрипта - с другими.
"4. Для решения JMeter недостаточно " Т.е., если я буду терзать приложение с помощью Jmeter и анализировать профайлер, то этого недостаточно?
А если недостаточно, то с каким минимальным набором тулов будет достаточно?
Минимум необходимых инструментов - это JMeter, хороший профайлер (в идеале - чтобы выдавал не только параметры кучи, но и частоту использования Garbage Collector, количество классов в системе). Кстати, по теме - а может и не совсем:
IBM Heap analyzer. Ну и кто-то/что-то, что может анализировать данные :-) Необязательно инструмент - но как правило анализ таких вещей сводится к: "провисла" или нет кривая кучи, что творится с памятью под ClassLoader (PermGenSpace out of memory error - свидетельствует о том, что упал classLoader, ему не хватило памяти). + смотрите логи самого сервера и логи вашего приложения (для серверных логов неплохо бы перевести его в режим debug - но только для исследования утечек памяти! режим debug снижает произодительность сервера!). логи вашего приложения - спросите программистов, куда они пишут их и пишут ли вообще. Мы у себя в конторе за правило берем в логи в debug режиме логгера скидывать информацию по каждому запросу пользователя и размеру кучи.
"5. К вопросу о самой сути теста:"
- Я тестирую это приложение на своей локальной машине-сервере для того, чтобы, отработав локальный сценарий затем перейти к тестированию этого же приложения уже в вэбе.
- Параметры теста взяты не с потолка, а известно, что реальное приложение нагружается до 100 concurrent users.
Что это означает? 100 пользователей в секунду, минуту, час, день? Исходя из условий вашего теста могу предположить, что в секунду. Откуда такая информация? из требований? а там точно пользователей, а не запросов к приложению? Это достаточно большая цифра. Если не в секунду - то тогда надо пересчитать это число :-) Вдобавок, пока вы гоняете этот тест на своей машине, не ожидайте, что все 100 пользователей смогут отработать: ваша машина по мощности и загруженности отличается от тестового сервера :-) Рекомендую отладить скрипты для мЕньшего количества пользователей. Фактически то, что у вас сейчас зависло приложение на
вашей машине при 100 пользователях не означает, что в приложении утечка памяти, это может означать все что угодно: ваша машина не справилась, утечка памяти, томкат скушал всю память на машине, винда начала сопротивляться, ураган Катрина косвенно повлиял на работу сервера и т.п. Измерение перформанса хорошо на машине, максимально приближенной по параметрам к production-серверу. В любом другом случае очень сложно пересчитать реальную производительность. Если вообще возможно
Только с соотношением значений параметров User/Rump-up я напутал (новичок с Jmeter ) – стоит задача протестировать приложение сотней одновременно работающих изеров.
Ramp-up - это время, за которое должны будут стартовать все пользователи. Поясняю. У вас есть 10 пользователей, вы указали Rump-up 20 секунд. Это означает, что стартует сначала 1ый пользователь, потом через rump-up/users = 20/10=2 секунды стартует второй. Потом через 2 секунды третий и т.п. За rump-up соответственно поднимутся все. Для чего это нужно? для плавного увеличения нагрузки на сервер. перформанс редко меряется сразу, сервер должен "войти" в состояние нагрузки - для этого и нужен rump-up
Для этого стартовать они будут по рендому. Количество их будет 100 (для порядка попробую и больше, так сказать "на вырост"), а rump up, если я правильно понимаю, будет зависеть еще и от сложности-длинности сценария поведения юзеров. Сценарий мне ещё не дали и я его выдумываю сам, да и простой он у меня пока.
Разбираемся. Стартовать пользователи в JMeter по рендому не могут. По рендому может выбиратся тот кейс/шаг, который будет выполняться тем или иным пользователем (например, у вас в тестплане два HttpRequest объединены под Random order controller - это значит, что каждый пользователь будет произвольно выбирать между ними). Rump-up (см. комментарий выше по тексту) это величина вообще сложная для расчета. Лично мы ее определяем эмпирически, косвенно вводя зависимость между длинной самого продолжительного пользовательского кейса в тестплане, количеством пользователей и интенсивностью загрузки, которую хотим получить. Общий принцип: сделать ее такой, чтобы сервер по возможности не свалился, не достигнув необходимого количества пользователей, но при этом достижение этой точки было разумно по времени. Если вы не можете добиться такого параметра - один из признаков slow performance вашего приложения (после этого задаются вопросом - а можем ли мы обеспечить такой перформанс)
Не совсем еще понимаю суть параметров Uniform Random Timer – Thread Delay Properties:
Random Delay Maximum (ms) – это что максимальное время для random-сгенерированных задержек??? Тогда как этот параметр "дружит" с парой параметров Users/Rump-up.
Constant Delay Offset (ms) - ???
задаю эти два параметра почти наугад
плохо, что наугад.
Random delay maximum (RDM): максимальная длина задержки в соответствующем контроллере, верхняя граница для генератора случайных чисел. Никаким образом не коррелирует с Rump-up, кроме как влияет на максимальную продолжительность того сценария, в котором присутствует
Constant delay offset (CDO): определяет нижнюю границу (точнее, насколько нижняя граница отстоит от RDM]. Если говорить языком математики, то время у вас будет генерироваться равномерно-случайно из отрезка [RDM-CDO; RDM].
Спросил у программиста о Tomcat. Говорит, что установлен только сервер JBoss, а Tomcat не установлен. Странно - я нашел какие-то следы Tomcat в папке jboss-3.2.1. Т.к. с Ваших слов "… сердцем у JBoss является Tomcat", я не уверен за правильность/грамотность программиста.
В коллегах сомневаться можно, но осторожно. И тем более в квалификации. может, это не тот программист? На всякий случай:
1.
http://www.jboss.org/products/jbossas - смотрим таблицу, в ней написано: "JBoss AS is the #1 Java application server on the market. What makes it even better is the fact that it integrates Hibernate, Apache Tomcat, EJB 3.0, and JBoss Cache into its microkernel foundation so you don't have to."
2. Можно заглянуть в Википедию: "
JBoss AS 4.0 is a J2EE 1.4 application server, with embedded Tomcat 5.5."в этом месте закончилась возможность делать цитаты :-) Форум позволяет их сделать не больше 10.Вопрос по JConsole: насколько просто и понятно с ней работать (ещё не знаю что это, но интересно)?
Лично я не работал с этой системой, может быть, сообщество поможет? В свою очередь благодарен тем, кто указал на этот инструмент - т.к. я попробую использовать его для наших нужд :-)
Всё вышеспрошенное выдаёт меня с головой – я только 2 недели как начал впервые тестировать Java приложение с помощью нового для меня Jmeter. До этого немного тестировал win-applications с помощью продуктов Mercury: WinRunner, QTP, LoadRunner. Тулы замечательные, но сейчас требование однозначное – пользоваться тулами либо бесплатными, либо недорогими, как TestComplete6 (пробовал триал версию - вроде неплохая, надо решить стоит он того, чтобы купить или нет - там неплохое функциональное тестирование).
С нагрузочным тестированием в Java environment столкнулся впервые.
Очень хочется разобраться как работает JBoss, Jmeter, JConsole и хочется попутно "зацепить" Javascript – писать тест-скрипты, разбираться в коде Javascript (делать WhiteBox testing).
ничего страшного, что недолго: рекомендую погуглить на тему тестинга как такового, заглянуть на
sqaforums.com - там иногда полезные мысли по тестированию. В аттаче лежит файлик в 350 килобайт по перформансу томката - он несколько старый, но основные принципы и вещи, на которые стоит обратить внимание там есть. В вашем случае все осложняется тем, что надо будет еще смотреть настройки hibernate и JBoss cache (если эти возможности используются в вашем приложении).
Насчет White-box тестирования java script: промолчу :-).