Уведомления

Группа в Telegram: @pythonsu

#1 Май 30, 2013 21:04:55

deye
Зарегистрирован: 2013-05-25
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточные сетевые приложения замедляются после промежутка времени

Спасибо всем за такое внимание к моей проблеме

По делу:
Lexander,

Сколько вы говорите у вас потоков - 100 и более?
Да, обычно меньше 100 не использовал

Чтобы проверить эту гипотезу, проверьте время до замедления с разным количеством потоков.
Не очень понял что вы имеете ввиду? Если имеется ввиду зависимость влияния количества потоков на время замедления, то её я проверил и, как писал постом выше - она обратная: чем больше потоков - тем меньше времени проходит до замедления.

либо уменьшить количество потоков - этот вариант подойдет, если сетевой интерфейс нагружен на 50 и более процентов;
Проверил нагрузку сетевого интерфейса: как до замедления, так и после, сетевой интерфейс используется обычно не более чем на 5%

либо переписать код на multiprocessing, twisted, asyncore и т.п. вещах
Уже смотрю в сторону twisted, но не увидел в нём поддержки socks5. Только socks4, если не ошибаюсь

lorien,
для этого я и сделал Grab::Spider, чтобы сотни тредов или процессов не создавать.
Но Spider подойдёт только в целях работы с http. А моя проблема наблюдается и в случае работы с smtp


Офлайн

#2 Май 31, 2013 11:53:28

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Многопоточные сетевые приложения замедляются после промежутка времени

либо переписать код на multiprocessing

На сколько процесс грузит ядро? если не сильно, например 50%, то от процессов не будет смысла.

ЗЫ: в качестве быстрого костыля можно сделать авто-перезагрузку процесса.

Офлайн

#3 Май 31, 2013 14:41:20

deye
Зарегистрирован: 2013-05-25
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Многопоточные сетевые приложения замедляются после промежутка времени

Интересную вещь обнаружил сегодня.
Попробовал переделать многопоточное приложение, работающее с smtp, используя gevent.

В итоге всё работало отлично (скорость возможно даже чуть быстрее чем на потоках), памяти жрало ещё меньше, нагрузка сетевого интерфейса не поднималась выше 1%, НО после такого же промежутка времени, как у многопоточных приложений, скорость упала. Т.е. на 300 потоках скорость падала на 18 минуте, и на 300 гринлетах скорость также упала на 18 минуте.

Что это может значить?

Отредактировано deye (Май 31, 2013 14:42:41)

Офлайн

#4 Май 31, 2013 14:48:59

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Многопоточные сетевые приложения замедляются после промежутка времени

В свете вновь открывшихся фактов у меня еще 2 гипотезы:
1. стоит ограничение на сервере
2. стоит ограничение у провайдера
Это маловероятно (особенно, второе), но просто отложите себе в память.

Я все еще настаиваю на установке счетчиков и профилировании, чтобы понять где и на чем падает скорость.



Офлайн

#5 Июнь 1, 2013 09:26:50

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Многопоточные сетевые приложения замедляются после промежутка времени

Lexander
1. стоит ограничение на сервере
2. стоит ограничение у провайдера
тоже об думал.
deye
скорость также упала
попробуйте для эксперимента запустить два или три таких параллельно,
кстати какой входящий трафик получается? это из локалки качается или из инета?

Офлайн

#6 Июнь 1, 2013 09:28:27

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Многопоточные сетевые приложения замедляются после промежутка времени

также для эксперимента запустить второй процесс на 15минуте.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version