|
|
|
Подскажите про возможности JVM и Jmeter
|
|||
|---|---|---|---|
|
#18+
Господа, подскажите пожалуйста... Нигде не нашел литературы, которая могла бы рассудить разногласия... Из того, что имеется... 2 instance в Amazon: Large, на нем стоит непосредственно сам Jmeter с тестом Small, на нем контейнер сервлетов с java приложением. Вот характеристики: M1 Small Instance – default*1.7 GiB memory 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit) 160 GB instance storage 32-bit or 64-bit platform I/O Performance: Moderate EBS-Optimized Available: No API name: m1.small M1 Large Instance7.5 GiB memory 4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each) 850 GB instance storage 64-bit platform I/O Performance: Moderate EBS-Optimized Available: 500 Mbps API name: m1.large Необходимо обеспечить нагрузку в 100000 пользователей, подключение(/создание потоков) - 2шт / 1 секунду. Алгоритм таков: Пользователь зашел. Авторизовался. Отправил одно сообщение. Изначально, запустили проверочно Jmeter c созданием пустых потоков. Итог - instance выдержал около 36000. Запустили боевой тест. Система отваливается после 100 пользователей. Господин программист утверждает, что тест полностью некорректен. Товарищ программистТребования к тесту с учетом ограничения окружения и Apache JMeter: 1. Запуск (Одновременно или последовательно 30000 потоков, эмулирующих действия пользователей) некорректен, т.к. jvm, которая используется в JMeter, т.к. JMeter будет запускать потоки и блокировать их. В результате, одновременно работать будет крайне ограниченное число потоков (100-200). В связи с этим надо выяснить, сколько одновременно работающих потоков допустимо на одной jvm jmeter. 2. В связи с 1 пунктом использовать режим distributed mode в JMeter. 3. Для достижения необходимых 100к подключений можно организовать пулирование поток на стороне JMeter. Т.е. выделять на одного пользователя не отдельный поток каждый раз, а выдавать его из пула. Для нашей системы этого будет достаточно. P.S. Опечатки или бага в JMeter про Ramp-Up period нет. Может кто то использовал хорошо Jmeter в своих нагрузочных тестах и подскажет, сколько же все таки он сможет выдержать на 1 instance? P.S. distributed mode в JMeter использовать надо, спору нет, но не по 100 же потоков на 1 тачке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 12:30:52 |
|
||
|
Подскажите про возможности JVM и Jmeter
|
|||
|---|---|---|---|
|
#18+
Кстати, вот что происходит при работе теста: ps -aux | grep jmeterroot 12176 184 28.6 12440616 2193668 ? Sl Mar19 1627:39 java -Dapple.laf.useScreenMenuBar=true -jar ./ApacheJMeter.jar -n -t /.hudson/jmeter/LoadTest_19_03_2013.jmx root 27674 0.0 0.0 4280 584 pts/0 S+ 07:27 0:00 sh jmeter.sh -n -t /.hudson/jmeter/LoadTest_19_03_2013.jmx root 27676 72.0 16.9 6183324 1295312 pts/0 Sl+ 07:27 2:13 java -Dapple.laf.useScreenMenuBar=true -jar ./ApacheJMeter.jar -n -t /.hudson/jmeter/LoadTest_19_03_2013.jmx root 31628 0.0 0.0 8148 924 pts/4 S+ 07:30 0:00 grep --color=auto jmeter Товарищ программер утверждает, что Jmeter создал толлько один поток: ps -o nlwp -p 27674NLWP 1 Мне почему то кажется, что это его взгляд просто на shell, по сути результат вот: ps -o nlwp -p 27676NLWP 9544 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 12:35:16 |
|
||
|
Подскажите про возможности JVM и Jmeter
|
|||
|---|---|---|---|
|
#18+
"Товарищ программер" отчасти прав. Запустить полностью конкурентно достаточное количество тестов с одного инстанса вы вряд ли сможете. Ни JMeter, ни Java тут вообще не при чем. У вас только 1 EC2 Compute Unit! И с помощью него вы собираетесь эмулировать 100000 конкурентных подключений! Ха! Можно примерно оценить отношение в CPU времени между созданием\запуском одного запроса в тесте и временем обработки одного запроса на сервере. Допустим 1 запрос обрабатывается 1 секунду. А создание\обработка запроса-теста - 0.1 сек. Тогда одним ядром можно сэмулировать примерно конкурентное подключение 10-ти клиентов. Опять же, это не совсем реальная конкуренция, так как запросы будут отправлены последовательно. Понятно, что реальное отношение намного больше и где-то 100-1000 клиентов с одного ядра вы сможете выдать. Но, не 100К. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 13:23:33 |
|
||
|
Подскажите про возможности JVM и Jmeter
|
|||
|---|---|---|---|
|
#18+
IxPictВ результате, одновременно работать будет крайне ограниченное число потоков (100-200). На одном ядре. Ага. На одном ядре одновременно 1 поток. 100-200 это "условно одновременно", т.е. можно запустить 100 потоков которые смогут нагрузить сервер примерно как 100 реальных юзеров. Из-за того что на выполнение теста надо в 100 раз меньше времени чем на обработку запроса сервером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 13:27:29 |
|
||
|
Подскажите про возможности JVM и Jmeter
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Никто и не собирался долбить 100к потоков на 1 инстансе. авторИзначально, запустили проверочно Jmeter c созданием пустых потоков. Итог - instance выдержал около 36000. Понятно, что он не вывезет 100к. Blazkowicz На одном ядре. Ага. На одном ядре одновременно 1 поток. Т.е. для того, чтобы было все не условно - надо 100к ядер? BlazkowiczУ вас только 1 EC2 Compute Unit! И с помощью него вы собираетесь эмулировать 100000 конкурентных подключений! Ха! Сколько должно быть? Не понимаю, почему бы не сделать 5-6 вируталок, ну 10 наконец... и нормально запускать оттуда. Неужели Jmeter ограничивает как то? Вот суть вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 13:44:45 |
|
||
|
Подскажите про возможности JVM и Jmeter
|
|||
|---|---|---|---|
|
#18+
Вы упираетесь не JMeter, а в железо. 10 виртуалок вам не добавят ничего т.к. грубо говоря будет работать одна, оккупировав забив все CPU, а остальные будут ждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 13:50:09 |
|
||
|
Подскажите про возможности JVM и Jmeter
|
|||
|---|---|---|---|
|
#18+
IxPictНикто и не собирался долбить 100к потоков на 1 инстансе. Из первого поста это не очевидно. Дан инстанс - дана проблема сделать нагрузку в 100К. Собирались вы это делать или нет, там не написаною. IxPictИзначально, запустили проверочно Jmeter c созданием пустых потоков. Итог - instance выдержал около 36000. Не понятно что за "пустые" потоки. Какой из 2х инстансов "выдержал" и что именно случилось потом когда он "не выдержал". IxPictПонятно, что он не вывезет 100к. Это хорошо. Осталось подсчитать сколько примерно одно ядро может выдать тестов, максимально нагрузив сервер. Оттуда и вычислить необходимое число ядер. IxPictТ.е. для того, чтобы было все не условно - надо 100к ядер? Нет. На сервере 4 ядра. Он всё равно будет ими обрабатывать 100К запросов последовательно. Поэтому эмулировать 100к полностью одновременных подключений для тестирования смысла нет. Я лишь указываю неточности в вашей терминологии. Чтобы объяснить чего именно можно добиться. IxPictСколько должно быть? Я же объяснил выше. Нужно прикинуть сколько запросов может выдать одно ядро клиента, чтобы полностью нагрузить одно ядро сервера. Соответсвенно поделить на 4 ядра сервера. Потом 100К разделить на полученое значение. Тогда вы получите количество клиентских ядер... Хотя там ещё много чего ведь на IO уйдёт. Не проще ли запустить постоянный тест в цикле на клиенте (да, через пул потоков, чтобы компенсировать простой на IO). Посмотреть какая вышла нагрузка на сервер. И из этого же вычислить сколько нужно клиентских ядер, чтобы полностью нагрузить сервер. IxPictНе понимаю, почему бы не сделать 5-6 вируталок, ну 10 наконец... и нормально запускать оттуда. Какие ещё виртуалки? Вы же говорите, что у вас только один Small Instance. У него физически одно CPU Core. Сколько бы вы на неё виртуалок не делали, количество ядер не выростет. IxPictНеужели Jmeter ограничивает как то? Вот суть вопроса. Нет, Jmeter не ограничивает. Физические ресурсы ограничивают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 14:06:52 |
|
||
|
Подскажите про возможности JVM и Jmeter
|
|||
|---|---|---|---|
|
#18+
IxPict, IxPictТ.е. для того, чтобы было все не условно - надо 100к ядер? А лучше 100к машин. А вообще воспользуйтесь советом Blazkowicz: BlazkowiczНе проще ли запустить постоянный тест в цикле на клиенте (да, через пул потоков, чтобы компенсировать простой на IO). Посмотреть какая вышла нагрузка на сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 15:59:38 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38191309&tid=2129730]: |
0ms |
get settings: |
19ms |
get forum list: |
21ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
45ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 366ms |
| total: | 538ms |

| 0 / 0 |
