[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Крушится Apache из-за Curl
session_on
Привет, помогите пожалуйста советом.
Не могу понять почему постоянно вылетает apache "Событие: Appcrash, приложение: httpd.exe, имя модуля с ошибкой php_curl.dll".
Apache крушится постоянно когда я запускаю множество скриптов которые что-то ищут на сайтах, в данный раз я проверяю доступность прокси серверов - в 120 потоков.



//Файл connect_proxy_info.php
ignore_user_abort(true);
set_time_limit(0);
ini_set("max_execution_time", "7776000");

$path='connect_proxy.php';

$start=120;//Количество запускаемых скриптов

$open=0;
while($open++<$start){//Запускает 120 connect_proxy.php
$fp=fsockopen("test1.ru", 80, $errno, $errstr, 10);
if(!$fp){
}
else{
$out="GET /$path HTTP/1.0\r\n";
$out.= "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n";
$out.= "Host: test1.ru\r\n";
$out.= "Accept: {$_SERVER['HTTP_ACCEPT']}\r\n";
$out.= "Accept-Language: {$_SERVER['HTTP_ACCEPT_LANGUAGE']}\r\n";
$out.= "Connection: Close\r\n\r\n";
fputs($fp,$out);
fclose($fp);
sleep(1);
}
}




//Файл connect_proxy.php

//Подключение к базе


ignore_user_abort(true);
set_time_limit(0);
ini_set("max_execution_time", "7776000");

search:

$res1=mysql_query("SELECT * FROM `proxy` WHERE `proverka`='0' ORDER BY RAND()");
$res=mysql_fetch_array($res1);
$id=$res['id'];
$proxyip=$res['ip'];
$proxyport=$res['port'];
if(empty($id)){
exit;
}else{
mysql_query("UPDATE `proxy` SET `proverka`='1' WHERE `id`='$id'");
}

$a=0;
$uptime=0;
$uptime2=0;
$anm=1;
$timepacked=0;


while($a++<100){//Отправка 100 запросов
$ch=curl_init();
$timepacked2=gettimeofday("sec");
curl_setopt($ch, CURLOPT_URL, 'site.ru/script_proxy.php');//Отправляю запросы на свой VPS
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_PROXY, $proxyip);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxyport);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows Mobile; WCE; Opera Mobi/WMD-56835; U; ru) Presto/2.4.13 Version/19.00');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Accept: text/html, application/xml;q=0.9, application/xhtml+xml, application/x-obml2d, multipart/mixed, application/vnd.wap.multipart.mixed, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1","Accept-Language: ru-RU,ru;q=0.9,en;q=0.8","Accept-Encoding: gzip, deflate","Cache-Control: no-cache","Connection: Keep-Alive"));
curl_setopt($ch, CURLOPT_ENCODING, 1);
$html=curl_exec($ch);
curl_close($ch);
preg_match('!HELLO V(.*?)S!i',$html,$vh);//В script_proxy.php на VPS высвечивается надпись HELLO VPS - нужно чтоб узнать сколько дошло пакетов до сервера, сколько потерялось + узнать среднее время доставки
if(!empty($vh[1]) AND $vh[1]=='P'){
$timepacked=$timepacked+round(gettimeofday("sec")-$timepacked2,3);
preg_match('!COI(.*?)CIDENCE!i',$html,$vh2);//Если присутсвует COINCIDENCE - прокси не анонимный
if(!empty($vh2[1]) AND $vh2[1]=='N'){
$anm=2;
}
$uptime++;
}else{
$uptime2++;
}
usleep(mt_rand(200000,300000));
}

$timepacked=round($timepacked/$uptime,3);//Получаем среднее время доставки
mysql_query("UPDATE `proxy` SET `proverka`='2', `speed`='$timepacked', `uptime`='$uptime', `uptime2`='$uptime2', `anm`='$anm' WHERE `id`='$id'");
usleep(mt_rand(200000,300000));
goto search;



Скрипт хорошо работает, но вот при множестве потоков Apache крушится...
Сначала я его тестировал на Denwere, я и другие тестировал в множестве потоков - которые что то ищут на каких-то сайтах - при множестве потоков например 100+ через некоторое время Apache крушится "Чем больше потоков запущу тем быстрее вылетает Apache, это может быть 3 минуты - 30 минут"

Поставил другой php_curl.dll, обновил php на более новую версию на Denwere - не помогло.

Скачал с официального сайта open-server.ru "Open Server 5.2.5 полную версию 903mb", установил, перенес базы данных и все скрипты на него (правда в трее при наведение на флаг пишется версия open servera 5.2.2 - но это не важно).
Думал это поможет, но это не помогло, apache вылетает.

Поставил тогда версию в настройках Open Servera "Apache 2.4 x64, PHP 5.6 x64" - настроил конфиги чтоб множество скриптов работали одновременно и все остальное по мелочи увеличил.
Не помогло.

Облазил кучу сайтов в поисках выявления причины, перепробовал кучу советов - не помогает и все.

Операционка Windows 7 X64 - дрова обновлял
Так же тестировал на Windows XP sp 3

Подскажите пожалуйста как же можно решить эту проблему? Любые решения пишите - буду тестировать и надеяться что выявлю причину крушения.

Версия Curl на данный момент 7.49.1
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.