2010-12-02 11 views
-1

ループでx回実行されるPHPスクリプトがあります。 コードは非常に小さく、チェックを実行します。 一部のループは1秒以内に実行され、変化します。いくつかのループは最大8秒の遅延で実行されます。PHPスクリプトをより速く実行するためにサーバーを調整するにはどうすればよいですか?

1秒から8秒ではなく、ループ間の時間をミリ秒(またはできるだけ早く)に短縮するには、サーバー上でどのように調整/微調整(または専用サーバーのマネージャに指示すること)できますか?

ありがとうございました!

PHPコード

<style type="text/css"> 
#check { font: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 40px; } 
.red { color: #C00; } 
.green { color: #060; } 
</style> 

<?php  date_default_timezone_set('Australia/Brisbane'); $var1 = "variable";  $var2 = 1;  $var3=="no"; 
       while ($var2 <= 50)  { 

         $sApiUrl = "https://www.apiurl.com/"; 

         $aParams = Array(
            'uid'  => "user", 
            'pw'  => "key",  
            'command' => "command",  
            'sld'  => "main",   
            'tld'  => "ext");   


         $oCurl = curl_init(); 
         curl_setopt($oCurl, CURLOPT_URL, $sApiUrl); 
         curl_setopt($oCurl, CURLOPT_POST, 1); 
         curl_setopt($oCurl, CURLOPT_POSTFIELDS, $aParams); 
         curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, true); 
         curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, false); 
         $sResponse = curl_exec($oCurl); 
         curl_close($oCurl); 


         $oOutput = new SimpleXmlElement($sResponse); 


         foreach ($oOutput as $v1) 
          { 
          foreach ($v1 as $v2) 
          { 
           foreach ($v2 as $v3) 
           { 
            foreach ($v3 as $v4=>$temp) 
            { 
             if($v4=="text") 
              $var4 = $temp; 
              if($var4=="true") 
               {           
                $aParams = Array(
                'uid'  => "user", 
                'pw'  => "key", 
                'command' => "command", 
                'sld'  => "main",  
                'tld'  => "ext", 
                'dosomething' => "yes");  


                $oCurl = curl_init(); 
                curl_setopt($oCurl, CURLOPT_URL, $sApiUrl); 
                curl_setopt($oCurl, CURLOPT_POST, 1); 
                curl_setopt($oCurl, CURLOPT_POSTFIELDS, $aParams); 
                curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, true); 
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, false); 
                $sResponse = curl_exec($oCurl); 
                curl_close($oCurl); 

                $var3=="yes"; 
               }       
            } 
           } 
          } 
          }   $checktime = date('h:i:s A');       echo "<div id=\"check\">$checktime, checked $var1<br>";   if ($var4=="true")   echo "<div class=\"green\"> $var4";   else   echo "<div class=\"red\"> $var4"; 
       if ($var3=="yes")   echo " and yes"; echo "</div></div>";  $var3=="no"; $loops++; }  ?> 

プロセッサ情報

プロセッサ#1ベンダ:GenuineIntel プロセッサ#1名称:インテル(R)Xeon(R)CPUのE5405の@ 2.00GHz プロセッサ#1速度:1995.120MHz プロセッサ#1キャッシュサイズ:6144KB

プロセッサ#2ベンダー:GenuineIntel プロセッサ#2名:インテル(R)Xeonプロセッサ(R)CPU E5405する@ 2.00GHz プロセッサ#2速度:1995.120メガヘルツ プロセッサ#2キャッシュサイズ:6144キロバイト

プロセッサ#3ベンダー:GenuineIntel プロセッサ#3名:インテル(R)Xeonプロセッサ(R)CPU E5405する@ 2.00GHz プロセッサ#3速度:1995.120メガヘルツ プロセッサ#3のキャッシュサイズ:6144キロバイト

プロセッサ#4ベンダー:GenuineIntel プロセッサ#4名:Intel(R)Xeon(R)CPU E5405 @ 2.00GHz プロセッサ#4速度:1995.120 MHz プロセッサ#4キャッシュサイズ:6144 KB

プロセッサ#5ベンダ:GenuineIntel プロセッサ#5名:インテル(R)Xeon(R)CPUのE5405の@ 2.00GHz プロセッサ#5スピード:1995.120 MHzの プロセッサ#5キャッシュサイズ:6144キロバイト

プロセッサ#6ベンダー:GenuineIntel プロセッサ#6名:インテル(R)Xeonプロセッサ(R)CPU E5405する@ 2.00GHz プロセッサ#6スピード:1995.120メガヘルツ プロセッサ#6キャッシュサイズ:6144キロバイト

プロセッサ#7ベンダー:本物のインテリア プロセッサ#7の名前:Intel(R)Xeon(R)CPU E5405 @ 2.00GHz プロセッサ#7速度:1995.120メガヘルツ プロセッサ#7キャッシュサイズ:6144キロバイト

プロセッサ#8ベンダー:GenuineIntel プロセッサ#8名:インテル(R)Xeonプロセッサ(R)CPUのE5405する@ 2.00GHz プロセッサ#8スピード:1995。120メガヘルツ プロセッサ#8キャッシュサイズ:クラッシュ・カーネル(0x0には0x0)のための6144キロバイト

メモリ情報

メモリ許容範囲 メモリnotwithin:8302344k/9175040kあり(2176kカーネルコード、80272k予約、 901kデータ、228kのinit、7466304k HIGHMEM)

システム情報

Linuxのserver.myserver.com 2.6.18-194.17.1.el5PAE#1 SMP水曜日9月29日13:3一時51分EDT 2010 i686のi686のi386のGNU/Linuxの

物理ディスク

SCSIデバイスはsda:1952448512 512バイトのHDWR部門(999654メガバイト) はSDA:ライトプロテクトオフです SDA:モードセンス: 03 00 00 08 SCSIデバイスはsda:ドライブのキャッシュ: SDAが1952448512 512バイトのHDWR部門(999654メガバイト):モードセンス:03 00 00 08 SCSIデバイスのSDAライトプロテクトオフ sdaにある バックSCSIデバイスのSDAを書きます:ドライブキャッシュ:書き戻し sd 0:1:0:0:接続されたscsiディスクsda sd 4:0:0:0:接続SCSIリムーバブルディスクSDB は、SD 0:1:0:0:アタッチドSCSIジェネリックSG4タイプ0 SD 4:0:0:0:アタッチドSCSIジェネリックSG7タイプ0

現在のメモリ使用量

  total  used  free  shared buffers  cached 

Memの:8306672 7887632 419040 0 508076 6496876 -/+バッファ/キャッシュ:882680 7423992 スワップ:4095992 428 4095564 合計:12402664 7888060 4514604

現在のディスクAVAIL使用%が は/ dev /マッパー/はVolGroup00-LogVol00 898G 200G 653G 24%/ は/ dev/sda1を99M 19M 76M 20%/ブート時に なし4.0G 0をマウントに使用用途

ファイルシステムサイズ4.0G 0%/ dev/shm /var/tmpMnt 4.0G 161M 3.6G 5%/ tmp

+1

さらに詳細が必要です。コード例とサーバー設定情報が必要です。 –

+0

サーバー情報を追加しました。すぐにコードを追加します – iCeR

+0

@El Yobo - PHPスクリプト – iCeR

答えて

1

データベース、電子メール、Webサービス、または他の同様のコンポーネントを使用していますか?一般的に、PHPスクリプトのパフォーマンスは、これらに最も依存しています。

Xdebugのようなプロファイリングツールを使用して、スクリプトを解析し、最も遅いコード領域を見つけることができます。このコードを最適化してパフォーマンスを向上させることができます(内部ループなど)。

+0

ありがとうございました。スクリプトはAPIとは別のものには接続しません。値をAPIに渡し、コードを返します。 Xdebugを除いて、パフォーマンスを改善するために何か他のことができるでしょうか? – iCeR

+0

@iCer:APIとは何ですか?プロファイリングすることで、ほとんどの時間がPHPコードまたはAPIに費やされているかどうかを確認できます。他にもたくさんのオプションがありますが、まずプロファイリングをお勧めします。 – jevon

+0

ドメインレジストラAPIです。ちょうどXdebugをダウンロードして、私がそれをどうするべきか分かりません:/ – iCeR

1

私はこれを個人的に使っていませんが、PHPでcurl_multi *の使用を検討する必要があると思われます。これは一度に複数のリクエストを実行できるように思われます。

http://php.net/manual/en/function.curl-multi-init.php

あなたのボトルネックはほぼ確実シリアルHTTP接続を作ることになります参照してください。 AFAIK curl_multi_ *関数は、これらを並列に実行できるようにします。

関連する問題