pcntl_fork - как быстрее и правильнее - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.7196
BTC/USD61571.2861
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 22.09.2011, 18:07   #1
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
Отправить сообщение для Hector с помощью Jabber
По умолчанию pcntl_fork - как быстрее и правильнее

В общем делаю чекер соксов на PHP pcntl_fork. Ставлю 100 потоков. В списке около 30 000 проксей. Так вот доходит до 3000 и начинает сильно тормозить (замедляется выполнение потоков) хотя и выделено 2000метров на скрипт, и вообще оператива и проц не загружены. Не могу понять в чем причина? Чекать в 30 потоков очень долго.

Последний раз редактировалось Hector; 22.09.2011 в 18:16.
Hector вне форума  
Старый 22.09.2011, 18:11   #2
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
Отправить сообщение для Hector с помощью Jabber
автор темы ТС По умолчанию

В ТОП

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.
Hector вне форума  
Старый 22.09.2011, 19:23   #3
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

проверь лимиты таймаутов при коннекте к соксам. Ближе к 3000 видимо все 100 форк-процессов забиваются медленными соксами, соединения с которыми нужно обрубать принудительно.

также возможно ОС ограничивает какие-то ресурсы:
ulimit -a
например так: ulimit -u
ну и man ulimit

Но скорее всего виноваты медленные соксы и отсутствие лимитов по работе с ними
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 22.09.2011, 21:57   #4
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
Отправить сообщение для Hector с помощью Jabber
автор темы ТС По умолчанию

5 сек таймауты курлом дергаю
Думаешь курл лажает?

Если да то как решить трабл? Сокеты?
Hector вне форума  
Старый 22.09.2011, 22:16   #5
deschain
Senior Member
 
Аватар для deschain
 
Регистрация: 01.11.2007
Сообщений: 2,269
Бабло: $288535
По умолчанию

Hector, у курла есть трабл достаточно известный, при котором сокеты реально не отрубаются.
deschain вне форума  
Старый 22.09.2011, 22:19   #6
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
Отправить сообщение для Hector с помощью Jabber
автор темы ТС По умолчанию

Хм вот зараза! Альтернативный кусок кода чекера выложите?
Hector вне форума  
Старый 22.09.2011, 22:54   #7
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

да-да! как раз именно на таймаутах и именно с соксами у курла баг, какая версия? желательно > 7.18 иметь. Насколько я помню, курл принимал команду на установку коннект-таймаута на сокс4-5, но нихера ей не следовал.

если ОС=centos - то курл с пхп руками собирать

ну и форк - так то не лучший вариант, он простой, но рабочий. С форком ты быстрее упрешься в системные ресурсы, чем маскимум выжмешь из канала. Если нужно и канал забить, то мульти курл или stream_socket. А в идеале: форкать мультикурл или стримсокеты

на счет альтернативного куска кода не понятна фраза, ядро парсера спалить? ну хз
http://www.proxy-tool.net/ - я на основе этого делал
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 22.09.2011, 23:13   #8
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
Отправить сообщение для Hector с помощью Jabber
автор темы ТС По умолчанию

Так мультикурл еще глючнее.
Hector вне форума  
Старый 23.09.2011, 00:16   #9
dveredel
Читатель
 
Аватар для dveredel
 
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
По умолчанию

Асинхронные сокеты с асинхронным же коннектом (и соотв полным ручным контролем таймаута на коннект) имхо идеальный вариант. Только чистые сокеты (которые обертки над сишнымы) а не всякие там fsockopen.

Форкать процессы для мульти-запросов -- простая, но не самая лучшая идея, т.к. данную задачу в одном потоке можно делать, только логика усложняется конкретно.
dveredel вне форума  
Старый 23.09.2011, 00:33   #10
arma
Пионер
 
Аватар для arma
 
Регистрация: 21.12.2007
Сообщений: 197
Бабло: $37745
По умолчанию

curl не стоит использовать в скриптах, которые должны выжимать максимум из канала. Походу это первая ошибка многих
Сокеты лучше.
__________________
arma вне форума