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
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.
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.