Затык с параллельными get() на перле

12
SQ
На сайте с 17.10.2011
Offline
75
SPQ
612

Написал на перле программу, которая запрашивает достаточно много внешних данных через get().

Число параллельно исполняемых запросов внешних данных управляется в программе. При отладке заметил что на уровне 6-7 одновременных запросов наступает ограничение производительности. В этом режиме внешний трафик примерно 3 Мбит/с , если попытаться выполнять более 10 запросов, то внешний трафик падает до 2 Мбит/с и в такой же мере понижается общая производительность программы.

Кто-нибудь знает где искать узкое место? Может это что-то с портами? Может еще с чем?

Общая нагрузка на процессор не более 10%, памяти предостаточно.

bbon
На сайте с 01.04.2006
Offline
168
#1
SPQ:
Написал на перле программу, которая запрашивает достаточно много внешних данных через get().

В перле много модулей, и добрая половина из них имеет метод/функцию get. О котором модуле речь?

SPQ:
если попытаться выполнять более 10 запросов, то внешний трафик падает до 2 Мбит/с и в такой же мере понижается общая производительность программы.

А источник данных-то один и тот же? Может он и не справляется с отдачей?

SQ
На сайте с 17.10.2011
Offline
75
SPQ
#2
bbon:
В перле много модулей, и добрая половина из них имеет метод/функцию get. О котором модуле речь?

Модуль LWP::Simple

bbon:
А источник данных-то один и тот же? Может он и не справляется с отдачей?

Источники данных разные, подавялющее большинство из них имеют отдачу более 10 Мбит/с.

bbon
На сайте с 01.04.2006
Offline
168
#3
SPQ:
Модуль LWP::Simple

Источники данных разные, подавялющее большинство из них имеют отдачу более 10 Мбит/с.

А как распараллеливается скрипт - fork или threads?

SQ
На сайте с 17.10.2011
Offline
75
SPQ
#4
bbon:
А как распараллеливается скрипт - fork или threads?

Проще. Запуском отдельных .pl модулей, каждый из которых содержит get() и предварительную обработку. Окончательная стыковка (линковка) данных в главном модуле. Обмен данными через файлы.

bbon
На сайте с 01.04.2006
Offline
168
#5

Ощущение, что сам скрипт у вас ни причем. Может в диске дело? Вообще, трудно сказать, не зная всей конфигурации. 3 Мбит/c - это порядка 30 Мбайт в сек. Вот у меня сейчас sata диск в системе пишет на тесте со скростью от 12 до 20 Мбайт в сек - ну комп не очень новый.

Можно попробовать прогнать тест закачек на Ram-диск, если условия позволяют, а потом уже глядеть на возможные сетевые проблемы.

SQ
На сайте с 17.10.2011
Offline
75
SPQ
#6
bbon:
... 3 Мбит/c - это порядка 30 Мбайт в сек....

3 Мбит/c это примерно 300 Кбайт/с - скорость совсем смешная для любого диска :)

bbon
На сайте с 01.04.2006
Offline
168
#7

Ну да, протупил под вечер. Тогда сеть смотрите, попробовать десять wget-ов одновременно запустить по этим же адресам и посмотреть результат. Сам LWP - просто честно сосет трафик из соединения, без выкрутасов, там ничего не поймать.

SQ
На сайте с 17.10.2011
Offline
75
SPQ
#8
bbon:
Ну да, протупил под вечер. Тогда сеть смотрите, попробовать десять wget-ов одновременно запустить по этим же адресам и посмотреть результат. Сам LWP - просто честно сосет трафик из соединения, без выкрутасов, там ничего не поймать.

Десять каких wget-ов ?

N
На сайте с 06.05.2007
Offline
419
#9

SPQ, обычных теперь уже классических программ wget из обычного shell.

КАЖДЫЙ из 10 источников разный?

На какой платформе запускаете ? Не забываем про ограничения сокетов в openvz и ограничения на полуоткрытые соединения в "клиентских" windows.

Кнопка вызова админа ()
SQ
На сайте с 17.10.2011
Offline
75
SPQ
#10
netwind:
КАЖДЫЙ из 10 источников разный?
На какой платформе запускаете ? Не забываем про ограничения сокетов в openvz и ограничения на полуоткрытые соединения в "клиентских" windows.

Да , все 10 разные и все 10 весьма быстрые в отдаче.

Запускаю под денвером в win xp .

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий