Оптимизировать нагрузку на память сервера

Рейтинг: 0Ответов: 2Опубликовано: 04.10.2014

Есть сайт, рядом с ним лежит скрипт, который через cron запускается раз в 4 минуты и отправляет ~200 запросов.

Сайт крешится с 502 ошибкой. Из-за нагрузки на память.
Можно ли как-то уменьшить нагрузку на сервер или нужно покупать новый?

Код

set_time_limit(0);
include '../config.php';

function get_proxy() {
    $i=0;
    while($i<1000){
        $prox_get = mysql_query("SELECT * FROM proxy_list ORDER BY RAND() LIMIT 1");
        $prox_check = mysql_fetch_assoc($prox_get);
        $proxy = $prox_check['proxy'];
        $url = "https://www.google.ru/";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
        curl_setopt($ch, CURLOPT_TIMEOUT, 4);
        curl_setopt($ch, CURLOPT_PROXY, "$proxy");
        $ss=curl_exec($ch);
        curl_close($ch);
        if(!empty($ss)) {
            break;
        }
        $i++;
    }
    return $proxy;
}

function send_req_post($url,$post,$proxy){
    try{
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
        curl_setopt($ch, CURLOPT_TIMEOUT, 4);
        curl_setopt($ch, CURLOPT_PROXY, "$proxy");
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "$post");
        $ss=curl_exec($ch);
        curl_close($ch);
        return $ss;
    }
    catch(Exception $ex)
    {
        return "";
    }
}

$qu = mysql_query("SELECT * FROM  `bot`  WHERE `job`='1'");
while ($_ensh = mysql_fetch_assoc($qu)) {
    $proxy = get_proxy();
    $game = send_req_post('https://game.ru/req.php','action=get_user&auth='.$_ensh['auth_user'].'&rand='.lcg_value(),$proxy);
}

Ответы

▲ 1

А если попробовать так

function get_proxy() 
{
    $prox_get = mysql_query("SELECT * FROM proxy_list ORDER BY RAND() LIMIT 1000");
    while($prox_check = mysql_fetch_assoc($prox_get))
    {
        $proxy = $prox_check['proxy'];
            $url = "https://www.google.ru/";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,$url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
            curl_setopt($ch, CURLOPT_TIMEOUT, 4);
            curl_setopt($ch, CURLOPT_PROXY, "$proxy");
            $ss=curl_exec($ch);
            curl_close($ch);
            if(!empty($ss)) 
            { 
                break;
            }
    }
    return $proxy;
}
▲ 1

Используйте параллельные запросы CURL, это вам здорово сэкономит ресурсы.

Например, прокси проверяйте не по одной, а пачками по 100. И когда наберёте сразу 50 работающих проксей (или больше) за один раз, сразу 50 запросов в игровой скрипт.