|
| Дата |
|
USD/RUB | 93.7196 | BTC/USD | 61571.2861 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
22.09.2011, 18:07
|
#1
|
hustle
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
|
pcntl_fork - как быстрее и правильнее
В общем делаю чекер соксов на PHP pcntl_fork. Ставлю 100 потоков. В списке около 30 000 проксей. Так вот доходит до 3000 и начинает сильно тормозить (замедляется выполнение потоков) хотя и выделено 2000метров на скрипт, и вообще оператива и проц не загружены. Не могу понять в чем причина? Чекать в 30 потоков очень долго.
Последний раз редактировалось Hector; 22.09.2011 в 18:16.
|
|
|
22.09.2011, 18:11
|
#2
|
hustle
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
|
ТС
В ТОП
top - 16:28:16 up 28 days, 2:12, 2 users, load average: 0.02, 0.03, 0.10
Tasks: 2440 total, 1 running, 271 sleeping, 1993 stopped, 175 zombie
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 4137960k total, 1637212k used, 2500748k free, 128552k buffers
Swap: 8193140k total, 58268k used, 8134872k free, 351080k cached
Последний раз редактировалось Hector; 22.09.2011 в 18:18.
|
|
|
22.09.2011, 19:23
|
#3
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
проверь лимиты таймаутов при коннекте к соксам. Ближе к 3000 видимо все 100 форк-процессов забиваются медленными соксами, соединения с которыми нужно обрубать принудительно.
также возможно ОС ограничивает какие-то ресурсы:
ulimit -a
например так: ulimit -u
ну и man ulimit
Но скорее всего виноваты медленные соксы и отсутствие лимитов по работе с ними
|
|
|
22.09.2011, 21:57
|
#4
|
hustle
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
|
ТС
5 сек таймауты курлом дергаю
Думаешь курл лажает?
Если да то как решить трабл? Сокеты?
|
|
|
22.09.2011, 22:16
|
#5
|
Senior Member
Регистрация: 01.11.2007
Сообщений: 2,269
Бабло: $288535
|
Hector, у курла есть трабл достаточно известный, при котором сокеты реально не отрубаются.
|
|
|
22.09.2011, 22:19
|
#6
|
hustle
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
|
ТС
Хм вот зараза! Альтернативный кусок кода чекера выложите?
|
|
|
22.09.2011, 22:54
|
#7
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
да-да! как раз именно на таймаутах и именно с соксами у курла баг, какая версия? желательно > 7.18 иметь. Насколько я помню, курл принимал команду на установку коннект-таймаута на сокс4-5, но нихера ей не следовал.
если ОС=centos - то курл с пхп руками собирать
ну и форк - так то не лучший вариант, он простой, но рабочий. С форком ты быстрее упрешься в системные ресурсы, чем маскимум выжмешь из канала. Если нужно и канал забить, то мульти курл или stream_socket. А в идеале: форкать мультикурл или стримсокеты
на счет альтернативного куска кода не понятна фраза, ядро парсера спалить? ну хз
http://www.proxy-tool.net/ - я на основе этого делал
|
|
|
22.09.2011, 23:13
|
#8
|
hustle
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
|
ТС
Так мультикурл еще глючнее.
|
|
|
23.09.2011, 00:16
|
#9
|
Читатель
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
|
Асинхронные сокеты с асинхронным же коннектом (и соотв полным ручным контролем таймаута на коннект) имхо идеальный вариант. Только чистые сокеты (которые обертки над сишнымы) а не всякие там fsockopen.
Форкать процессы для мульти-запросов -- простая, но не самая лучшая идея, т.к. данную задачу в одном потоке можно делать, только логика усложняется конкретно.
|
|
|
23.09.2011, 00:33
|
#10
|
Пионер
Регистрация: 21.12.2007
Сообщений: 197
Бабло: $37745
|
curl не стоит использовать в скриптах, которые должны выжимать максимум из канала. Походу это первая ошибка многих
Сокеты лучше.
__________________
|
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
|