问题
I have a PHP script which runs on a loop for x amount of times. The code is very minimal and performs checks. Some loops will run within 1 second of each other and it varies.. some loops will run with up to 8 seconds delay.
How or what can I adjust/tweak on the server (or instruct the manager of my dedicated server) to reduce the time between loops to milliseconds (or as quick as possible) rather than 1 to 8 seconds?
Thank you!
PHP code
<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++; } ?>
Processor Information
Processor #1 Vendor: GenuineIntel Processor #1 Name: Intel(R) Xeon(R) CPU E5405 @ 2.00GHz Processor #1 speed: 1995.120 MHz Processor #1 cache size: 6144 KB
Processor #2 Vendor: GenuineIntel Processor #2 Name: Intel(R) Xeon(R) CPU E5405 @ 2.00GHz Processor #2 speed: 1995.120 MHz Processor #2 cache size: 6144 KB
Processor #3 Vendor: GenuineIntel Processor #3 Name: Intel(R) Xeon(R) CPU E5405 @ 2.00GHz Processor #3 speed: 1995.120 MHz Processor #3 cache size: 6144 KB
Processor #4 Vendor: GenuineIntel Processor #4 Name: Intel(R) Xeon(R) CPU E5405 @ 2.00GHz Processor #4 speed: 1995.120 MHz Processor #4 cache size: 6144 KB
Processor #5 Vendor: GenuineIntel Processor #5 Name: Intel(R) Xeon(R) CPU E5405 @ 2.00GHz Processor #5 speed: 1995.120 MHz Processor #5 cache size: 6144 KB
Processor #6 Vendor: GenuineIntel Processor #6 Name: Intel(R) Xeon(R) CPU E5405 @ 2.00GHz Processor #6 speed: 1995.120 MHz Processor #6 cache size: 6144 KB
Processor #7 Vendor: GenuineIntel Processor #7 Name: Intel(R) Xeon(R) CPU E5405 @ 2.00GHz Processor #7 speed: 1995.120 MHz Processor #7 cache size: 6144 KB
Processor #8 Vendor: GenuineIntel Processor #8 Name: Intel(R) Xeon(R) CPU E5405 @ 2.00GHz Processor #8 speed: 1995.120 MHz Processor #8 cache size: 6144 KB
Memory Information
Memory for crash kernel (0x0 to 0x0) notwithin permissible range Memory: 8302344k/9175040k available (2176k kernel code, 80272k reserved, 901k data, 228k init, 7466304k highmem)
System Information
Linux server.myserver.com 2.6.18-194.17.1.el5PAE #1 SMP Wed Sep 29 13:31:51 EDT 2010 i686 i686 i386 GNU/Linux
Physical Disks
SCSI device sda: 1952448512 512-byte hdwr sectors (999654 MB) sda: Write Protect is off sda: Mode Sense: 03 00 00 08 SCSI device sda: drive cache: write back SCSI device sda: 1952448512 512-byte hdwr sectors (999654 MB) sda: Write Protect is off sda: Mode Sense: 03 00 00 08 SCSI device sda: drive cache: write back sd 0:1:0:0: Attached scsi disk sda sd 4:0:0:0: Attached scsi removable disk sdb sd 0:1:0:0: Attached scsi generic sg4 type 0 sd 4:0:0:0: Attached scsi generic sg7 type 0
Current Memory Usage
total used free shared buffers cached
Mem: 8306672 7887632 419040 0 508076 6496876 -/+ buffers/cache: 882680 7423992 Swap: 4095992 428 4095564 Total: 12402664 7888060 4514604
Current Disk Usage
Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 898G 200G 653G 24% / /dev/sda1 99M 19M 76M 20% /boot none 4.0G 0 4.0G 0% /dev/shm /var/tmpMnt 4.0G 161M 3.6G 5% /tmp
回答1:
Do you use databases, emails, web services, or any other similar component? Generally, the performance of a PHP script is most dependent on these.
You can use a profiling tool like Xdebug to analyse your script and find the slowest areas of code. You can then optimise this code (e.g. inner loops) to improve performance.
回答2:
I've not used this personally, but I suspect you need to look into using the curl_multi* stuff in PHP - this appears to allow you to perform multiple requests at once.
See http://php.net/manual/en/function.curl-multi-init.php
Your bottleneck will almost certainly be making the HTTP connections serially. AFAIK the curl_multi_* functions will allow these to be performed in parallel.
来源:https://stackoverflow.com/questions/4331996/how-can-i-adjust-the-server-to-run-my-php-script-quicker