使用CURL的多线程增加了cpu使用率

时间:2016-08-05 07:23:15

标签: php multithreading curl cpu-usage

我有以下实例

  • mysql:1个实例(8GB RAM)
  • nginx:4次实例

我使用curl POST请求从mysql实例为4个nginx实例分配作业。在这种情况下,mysql cpu的使用量增加了。 我不希望任何CPU加载到mysql。 Mysql不应该等待来自nginxes的响应。

分配作业的Mysql脚本:

$query =  "SELECT id from tablename where is_active = '1'";
$result = mysql_query($query);
$total_jobs = mysql_num_rows($result); 
if($total_jobs > 0)
{
    $counter = 0;
    while ($row = mysql_fetch_array($result)) {

        // Assign next job 
        // Update job_last_pulled_at_for_processing for picked ids
        $now = date("Y-m-d H:i:s");

        $job_id_url = urlencode($row['id']);
        $passwd_comm = urlencode(base64_encode("abc"));
        $data_part="job_id=".$job_id_url."&passwd_comm=".$passwd_comm;

        $ssh_cmd ="curl -k POST --silent --max-time 3 --data '".$data_part."' http://".$nginx_instance.":8080/admin-alert.php > /dev/null &";
        echo "\nExecuting => CURL\n";
        exec($ssh_cmd);

        $counter++;
        sleep(5);
        if($counter>=12)  {
            GOTO ENDCASE; // If more 12 jobs every min then all of them will not get calculated every min.
        }
    } 
} else {
    echo "\nNo Job Eligible to assign";
}

执行作业的Nginx脚本:

$input_data = $_POST;
$job_id = urldecode($input_data['job_id']);
$passwd_post = base64_decode(urldecode($input_data['passwd_comm']));

if($passwd_post != "abc"){
        echo " Wrong Params "; exit;
}

if(!empty($job_id)) {
        exec("php /var/www/cron_files/update_master_value_cron.php ".$job_id." > /dev/null & "); 
}
echo " Completed "; exit;

如果我从CURL请求mysql cpu发送错误密码(abcxyz)没有增加。但是对于正确的密码即。要在nginx完成工作,那么Mysql cpu增加到100%。

如果nginxes执行作业,为什么Mysql cpu会增加?

0 个答案:

没有答案