Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задержка м/у переключением потоков. Время переключения м/у потоками растет 
:(
    Опции темы
marmota
  Дата 16.6.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Всем привет. 

Проблема:
Разрабатываю стресс тест. 
Кратко тест делает следующее: Запускается n потоков (n юзеров). Потом они все логинятся на сервер и начинают получать сообщения от сервера. Тест измеряет время, за которое эти сообщения доходят. Ну и спустя какое-то время вырубается по таймеру.
Те у меня на каждого юзера 4 потока: 
- главный, в котором запускаются все таймеры - он все запускает и заканчивается 
- поток, который в while(true) до exception'а ловит сообщения 
- поток, который отправляет подтверждения на сервер - управляется таймером
- поток, который включается спустя время и вырубает получение сообщения - управляется таймером

При n<60 потоков - работает стабильно - время доставки сообщений - 15-30 мс.
При n>60 - время доставки постоянно растет. те получается потоки не успевают переключаться м/ собой.

Не представляю, где задержка... :( 

логирование - подключала асинхронный аппендер
выводила время выполнения каждой операции в цикле, где получаю сообщения - вcе время ~const


Что можно еще поглядеть?  smile 

Это сообщение отредактировал(а) marmota - 16.6.2008, 12:33
PM MAIL   Вверх
AntonSaburov
Дата 16.6.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Это может быть уже проблема JVM и операционной системы. Надо экспериментировать.
PM MAIL WWW ICQ   Вверх
marmota
Дата 16.6.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Какэксперементировать?
Я в профайлере смотрела - ему всего хватает и памяти и процессора...
PM MAIL   Вверх
Greg
Дата 16.6.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: 1
Всего: 7



Цитата(marmota @  16.6.2008,  12:28 Найти цитируемый пост)
При n>60 - время доставки постоянно растет. те получается потоки не успевают переключаться м/ собой.

Не успевают переключаться так быстро как бы этого хотелось. Мне кажется это естественным.
Если потоки имеют одинаковый приоритет, то диспетчер должен обеспечивать им равные условия конкурирования на ресурсе процессора. Чем больше потоков, тем дольше выполняется отдельный поток, вне зависимости от того пришло ли сообщение с сервера. Плюс процессорное время на переключение между потоками. n=60 - это 60 юзеров (240 потоков) или 60 потоков (15 юзеров) ?
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
marmota
Дата 16.6.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



n=60 - это 60 юзеров (240 потоков)
просто 240 потоков - это же не критично много... или все-таки много? с учетом того, что профайлеру хватает ресурсов.
PM MAIL   Вверх
Greg
Дата 16.6.2008, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: 1
Всего: 7



Цитата(marmota @  16.6.2008,  15:30 Найти цитируемый пост)
или все-таки много? 
 Я и вправду не знаю. Насчет 240 это я конечно загнул, реальная цифра будет около 120. Как уже раньше заметили нужно эксперементировать.  Что заставляет вас думать, что ресурсов программе хватает ? (можно и дамп было бы привести ради интереса) Какого результата вы ожидаете при увеличении n ? Как ни крути, многопоточное исполнение вещь весьма дорогостоящая. И еще, насколько сильно увеличивается время выполнения при переходе с 60 до 61, с 61 до 62 ?

--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
COVD
Дата 16.6.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Те у меня на каждого юзера 4 потока: 
- главный, в котором запускаются все таймеры - он все запускает и заканчивается 
- поток, который в while(true) до exception'а ловит сообщения 
- поток, который отправляет подтверждения на сервер - управляется таймером
- поток, который включается спустя время и вырубает получение сообщения - управляется таймером


4 потока на юзера многовато. Сложилось впечатление, что это исключительно для теста. Например, зачем нужен "главный" поток каждому юзеру? Не правильнее ли поставить счетчик  принятых сообщений и чтобы каждый юзер заканчивал работу по достижению некоторого лимита. Применение таймеров в таких тестах - сомнительная практика. Если вы уменьшите количество потоков на юзера в тесте, то возможно граница n=60 возрастет и это будет означать, что , действительно, было слишком много потоков и компьютер не справлялся.
PM MAIL   Вверх
LSD
Дата 17.6.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
marmota
Дата 18.6.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Я уменьшила количество  потоков: по одному на юзера.
Юзеры во потоках получают через сокет сообщения(кусок xml).
Если этих сообщения сделать, к примеру 2 сообщ/сек при тех же 200 юзерах, то тест отрабатывает без проблем - время доставки сообщения 15-30 мс.
Если сделать 10 сообщений в секунду, то лог выглядит следующим образом:
Код

8:14:58:030 arata 31
18:14:58:030 abcms 31
18:14:58:030 aotantakatan 31
18:14:58:030 abdullah977 31
18:14:58:045 ariana29 46
18:14:58:045 andrejc2007 46
18:14:58:045 armi304050 46
18:14:58:045 alakay 46
18:14:58:045 aredunn 46
18:14:58:061 agpatev4 62
18:14:58:061 alnoor1 62
18:14:58:061 agp82 62
18:14:58:061 acred 62
18:14:58:280 Sanguinetti3 16
18:14:58:280 albaik 16
18:14:58:280 a970560 16
18:14:58:280 a663668 16
18:14:58:295 aaw66340 31
18:14:58:295 aniap 31
18:14:58:295 ank23 31
18:14:58:295 adamary 31
18:14:58:295 ardasekerci 31
18:14:58:295 anders 31
18:14:58:311 aiko001 47
18:14:58:311 Duckfoot 47
18:14:58:311 adroba 47
 и т.д....
ну только я значительно проредила лог....

Вот последняя цифра - время, которое было потрачено на получение сообщения. Она измеянется волнообразно.
С чем это может быть связано? В профайлере ему всех ресурсов хватает...

Добавлено через 1 минуту и 28 секунд
Цитата(LSD @ 17.6.2008,  15:34)
Слишком много потоков. Нужно сделать их количество константным. 1-2 потока читают сообщения из сети. 1-2 потока отправляют сообщения в сеть.1-10 потоков обрабатывают сообщения от клиентов.

Низя =( Это приложение для стресс-тестирования. Т.е. количество потоков(юзеров) должно быть кака смнимум 200...
PM MAIL   Вверх
LSD
Дата 19.6.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(marmota @  18.6.2008,  20:30 Найти цитируемый пост)
Вот последняя цифра - время, которое было потрачено на получение сообщения. Она измеянется волнообразно.

16 мс порог точности системного таймера (во всяком случае под Windows), замени System.currentTimeMillis() на System.nanoTime(), там точность выше.


Цитата(marmota @  18.6.2008,  20:30 Найти цитируемый пост)
Низя =( Это приложение для стресс-тестирования. Т.е. количество потоков(юзеров) должно быть кака смнимум 200... 

Стресс тестирования чего? ОС, сколько потоков она может выдержать?


--------------------
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.
PM MAIL WWW   Вверх
Metal_Heart
Дата 19.6.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



Цитата(LSD @  19.6.2008,  12:24 Найти цитируемый пост)
Стресс тестирования чего? ОС, сколько потоков она может выдержать? 


мне показалось, что требуется имитация большой нагрузки на сервер, 
а время между запросом и ответом - это показатель его загруженности

Цитата(marmota @  16.6.2008,  12:28 Найти цитируемый пост)
Запускается n потоков (n юзеров). Потом они все логинятся на сервер и начинают получать сообщения от сервера. Тест измеряет время, за которое эти сообщения доходят.





--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
LSD
Дата 19.6.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Metal_Heart @  19.6.2008,  14:33 Найти цитируемый пост)
мне показалось, что требуется имитация большой нагрузки на сервер, 
а время между запросом и ответом - это показатель его загруженности

Дык я же о другом. Я говорил, что для обслуживания 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.
PM MAIL WWW   Вверх
marmota
Дата 20.6.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Да, это стресс-тестирование сервера.
На самом деле архитектор этой тулзовины для стресс-тестирования позволяет создавать несколько нод с пользователями. Но если на одной ноде будет только, к примеру, 50 юзеров, то сколько ж это нод нужно для реальной загрузки сервера  smile ?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.