多数 (約 100) の php ファイルを同時に実行するスクリプトがあります。各スクリプトの開始時間が大幅に遅れることが多いことに気付きました。すべてのスクリプトを一度に実行すると、一部のスクリプトは 15 秒後にしか開始されませんでした。
以下のコードを使用して、これらのスクリプトを同時に実行します (このコードはエラーなしで動作しています)。100 個の php ファイルは、それらを同時に呼び出すスクリプトと同じサーバー上にあることに注意してください。
function my_curl ($i, $url, $post_data, $return, $auth='', $proxy='', $timeout=5) {
$curl="/usr/bin/curl -s";
if ($post_data!='') $curl.=" --data '$post_data'";
if ($timeout!='') $curl.=" --connect-timeout $timeout";
if ($auth!='') {
list($user,$pass)=explode(':',$auth);
$curl.=" --basic --user $user:$pass";
}
if ($proxy!='') {
list($proxy_ip,$proxy_port,$proxy_user,$proxy_pass)=explode(':',$proxy);
$curl.=" --proxy $proxy_ip:$proxy_port --proxy-user $proxy_user:$proxy_pass";
}
if ($return==0) {
$curl.=" $url >/dev/null 2>/dev/null &";
} else {
$curl.=" $url >return-$i 2>/dev/null &";
}
return("$curl\n");
}
$to_run='';
for ($i=0; $i<$max; $i++) {
$url='http://www.some_url_to_the_same_server.com/post.php';
$post_data="var=web-$i";
$to_run.=my_curl($i, $url, $post_data, $return, $auth, $proxy, $timeout);
}
file_put_contents(realpath($_SERVER["DOCUMENT_ROOT"]).'/run_data/runner.sh',$to_run);
shell_exec('/bin/bash '.realpath($_SERVER["DOCUMENT_ROOT"]).'/run_data/runner.sh');
3CPU linux centos サーバーを使用しています。私のシステムには 12 以上の procs r を持つべきではないことはわかっていますが、それはもっとたくさんあります (以下を参照)。上記のスクリプトを実行し、一度に 100 個の php スクリプトを起動すると、以下の vmstat が表示されます。
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
30 0 60 90388 14428 223996 0 0 20 10 3 10 0 0 99 1 0
システムが「休止」状態にある場合、次の出力が得られます。
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 60 155064 14672 223952 0 0 20 10 3 10 0 0 99 1 0
procs r が CPU の過負荷であることを示しているため、CPU が 99% のアイドル状態を示し、同時に procs r が非常に高いことを理解できません。
100 個のスクリプトすべてが一度に実行されるようにシステムのパフォーマンスを改善するにはどうすればよいですか?
よろしくお願いいたします。
更新 1:
これは、私の httpd.conf ファイルの関連部分です。
User apache
Group apache
KeepAlive On
KeepAliveTimeout 30
ServerAdmin admin@localhost
DocumentRoot "/var/www/html"
MaxClients 50
MaxRequestsPerChild 50
StartServers 5
MinSpareServers 5
MaxSpareServers 20
MaxKeepAliveRequests 50