![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| marmota |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Всем привет.
Проблема: Разрабатываю стресс тест. Кратко тест делает следующее: Запускается n потоков (n юзеров). Потом они все логинятся на сервер и начинают получать сообщения от сервера. Тест измеряет время, за которое эти сообщения доходят. Ну и спустя какое-то время вырубается по таймеру. Те у меня на каждого юзера 4 потока: - главный, в котором запускаются все таймеры - он все запускает и заканчивается - поток, который в while(true) до exception'а ловит сообщения - поток, который отправляет подтверждения на сервер - управляется таймером - поток, который включается спустя время и вырубает получение сообщения - управляется таймером При n<60 потоков - работает стабильно - время доставки сообщений - 15-30 мс. При n>60 - время доставки постоянно растет. те получается потоки не успевают переключаться м/ собой. Не представляю, где задержка... :( логирование - подключала асинхронный аппендер выводила время выполнения каждой операции в цикле, где получаю сообщения - вcе время ~const Что можно еще поглядеть? Это сообщение отредактировал(а) marmota - 16.6.2008, 12:33 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Это может быть уже проблема JVM и операционной системы. Надо экспериментировать.
|
|||
|
||||
| marmota |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Какэксперементировать?
Я в профайлере смотрела - ему всего хватает и памяти и процессора... |
|||
|
||||
| Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 1 Всего: 7 |
Не успевают переключаться так быстро как бы этого хотелось. Мне кажется это естественным. Если потоки имеют одинаковый приоритет, то диспетчер должен обеспечивать им равные условия конкурирования на ресурсе процессора. Чем больше потоков, тем дольше выполняется отдельный поток, вне зависимости от того пришло ли сообщение с сервера. Плюс процессорное время на переключение между потоками. n=60 - это 60 юзеров (240 потоков) или 60 потоков (15 юзеров) ? --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
| marmota |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
n=60 - это 60 юзеров (240 потоков)
просто 240 потоков - это же не критично много... или все-таки много? с учетом того, что профайлеру хватает ресурсов. |
|||
|
||||
| Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 1 Всего: 7 |
Я и вправду не знаю. Насчет 240 это я конечно загнул, реальная цифра будет около 120. Как уже раньше заметили нужно эксперементировать. Что заставляет вас думать, что ресурсов программе хватает ? (можно и дамп было бы привести ради интереса) Какого результата вы ожидаете при увеличении n ? Как ни крути, многопоточное исполнение вещь весьма дорогостоящая. И еще, насколько сильно увеличивается время выполнения при переходе с 60 до 61, с 61 до 62 ?
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
4 потока на юзера многовато. Сложилось впечатление, что это исключительно для теста. Например, зачем нужен "главный" поток каждому юзеру? Не правильнее ли поставить счетчик принятых сообщений и чтобы каждый юзер заканчивал работу по достижению некоторого лимита. Применение таймеров в таких тестах - сомнительная практика. Если вы уменьшите количество потоков на юзера в тесте, то возможно граница n=60 возрастет и это будет означать, что , действительно, было слишком много потоков и компьютер не справлялся. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Слишком много потоков. Нужно сделать их количество константным. 1-2 потока читают сообщения из сети. 1-2 потока отправляют сообщения в сеть.1-10 потоков обрабатывают сообщения от клиентов.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| marmota |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Я уменьшила количество потоков: по одному на юзера.
Юзеры во потоках получают через сокет сообщения(кусок xml). Если этих сообщения сделать, к примеру 2 сообщ/сек при тех же 200 юзерах, то тест отрабатывает без проблем - время доставки сообщения 15-30 мс. Если сделать 10 сообщений в секунду, то лог выглядит следующим образом:
ну только я значительно проредила лог.... Вот последняя цифра - время, которое было потрачено на получение сообщения. Она измеянется волнообразно. С чем это может быть связано? В профайлере ему всех ресурсов хватает... Добавлено через 1 минуту и 28 секунд
Низя =( Это приложение для стресс-тестирования. Т.е. количество потоков(юзеров) должно быть кака смнимум 200... |
||||
|
|||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
16 мс порог точности системного таймера (во всяком случае под Windows), замени System.currentTimeMillis() на System.nanoTime(), там точность выше.
Стресс тестирования чего? ОС, сколько потоков она может выдержать? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 4 Всего: 12 |
мне показалось, что требуется имитация большой нагрузки на сервер, а время между запросом и ответом - это показатель его загруженности
-------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Дык я же о другом. Я говорил, что для обслуживания 1000 клиентов не надо запускать 1000 потоков. Это не прибавит производительности, а скорее наоборот. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| marmota |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 28.6.2006 Репутация: нет Всего: нет |
Да, это стресс-тестирование сервера.
На самом деле архитектор этой тулзовины для стресс-тестирования позволяет создавать несколько нод с пользователями. Но если на одной ноде будет только, к примеру, 50 юзеров, то сколько ж это нод нужно для реальной загрузки сервера |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |