如何调整服务器以更快地运行我的 PHP 脚本?
我有一个 PHP 脚本,它循环运行 x 次。 代码非常少并且执行检查。 有些循环将在 1 秒内运行,并且会有所不同。有些循环将运行最多 8 秒的延迟。
我如何或如何在服务器上调整/调整(或指示我的专用服务器的管理员)以将循环之间的时间减少到毫秒(或尽可能快)而不是 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 名称:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 处理器 #1 速度:1995.120 MHz 处理器 #1 高速缓存大小:6144 KB
处理器 #2 供应商:GenuineIntel 处理器 #2 名称:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 处理器 #2 速度:1995.120 MHz 处理器 #2 高速缓存大小:6144 KB
处理器 #3 供应商:GenuineIntel 处理器 #3 名称:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 处理器 #3 速度:1995.120 MHz 处理器 #3 高速缓存大小:6144 KB
处理器 #4 供应商:GenuineIntel 处理器 #4 名称:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 处理器 #4 速度:1995.120 MHz 处理器 #4 高速缓存大小:6144 KB
处理器 #5 供应商:GenuineIntel 处理器 #5 名称:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 处理器 #5 速度:1995.120 MHz 处理器 #5 高速缓存大小:6144 KB
处理器 #6 供应商:GenuineIntel 处理器 #6 名称:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 处理器 #6 速度:1995.120 MHz 处理器 #6 高速缓存大小:6144 KB
处理器 #7 供应商:GenuineIntel 处理器 #7 名称:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 处理器 #7 速度:1995.120 MHz 处理器 #7 高速缓存大小:6144 KB
处理器 #8 供应商:GenuineIntel 处理器 #8 名称:Intel(R) Xeon(R) CPU E5405 @ 2.00GHz 处理器 #8 速度:1995.120 MHz 处理器 #8 缓存大小:6144 KB
内存信息
崩溃内核的内存(0x0 到 0x0)不在允许的范围内 内存: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:31:51 EDT 2010 i686 i686 i386 GNU/Linux
物理磁盘
SCSI 设备 sda:1952448512 512 字节 hdwr 扇区 (999654 MB) sda:写保护已关闭 sda:模式检测:03 00 00 08 SCSI 设备 sda:驱动器缓存:写回 SCSI 设备 sda:1952448512 512 字节 hdwr 扇区 (999654 MB) sda:写保护已关闭 sda:模式检测:03 00 00 08 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
内存:8306672 7887632 419040 0 508076 6496876 -/+ 缓冲区/高速缓存:882680 7423992 兑换:4095992 428 4095564 总计:12402664 7888060 4514604
当前磁盘使用情况
使用的文件系统大小 可用使用百分比 安装在 /dev/mapper/VolGroup00-LogVol00 898G 200G 653G 24% / /dev/sda1 99M 19M 76M 20% /boot 无 4.0G 0 4.0G 0% /dev/shm /var/tmpMnt 4.0G 161M 3.6G 5% /tmp
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您是否使用数据库、电子邮件、网络服务或任何其他类似组件?一般来说,PHP 脚本的性能最依赖于这些。
您可以使用 Xdebug 等分析工具来分析脚本并找到最慢的代码区域。然后您可以优化此代码(例如内部循环)以提高性能。
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.
我个人没有使用过这个,但我怀疑您需要研究在 PHP 中使用 curl_multi* 东西 - 这似乎允许您一次执行多个请求。
请参阅 http://php.net/manual/en/function.curl- multi-init.php
您的瓶颈几乎肯定是串行建立 HTTP 连接。据我所知,curl_multi_* 函数将允许这些函数并行执行。
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.