【发布时间】:2011-06-01 20:03:37
【问题描述】:
我当前的代码(见下文)使用 147MB 的虚拟内存! 我的提供程序默认分配了 100MB,并且该进程在运行后被终止,导致内部错误。 该代码使用 curl multi 并且必须能够循环超过 150 次迭代,同时仍然最小化虚拟内存。下面的代码仅设置为 150 次迭代,仍然会导致内部服务器错误。在 90 次迭代时,问题不会发生。
如何调整我的代码以降低资源使用/虚拟内存?
谢谢!
<?php
function udate($format, $utimestamp = null) {
if ($utimestamp === null)
$utimestamp = microtime(true);
$timestamp = floor($utimestamp);
$milliseconds = round(($utimestamp - $timestamp) * 1000);
return date(preg_replace('`(?<!\\\\)u`', $milliseconds, $format), $timestamp);
}
$url = 'https://www.testdomain.com/';
$curl_arr = array();
$master = curl_multi_init();
for($i=0; $i<150; $i++)
{
$curl_arr[$i] = curl_init();
curl_setopt($curl_arr[$i], CURLOPT_URL, $url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_arr[$i], CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl_arr[$i], CURLOPT_SSL_VERIFYPEER, FALSE);
curl_multi_add_handle($master, $curl_arr[$i]);
}
do {
curl_multi_exec($master,$running);
} while($running > 0);
for($i=0; $i<150; $i++)
{
$results = curl_multi_getcontent ($curl_arr[$i]);
$results = explode("<br>", $results);
echo $results[0];
echo "<br>";
echo $results[1];
echo "<br>";
echo udate('H:i:s:u');
echo "<br><br>";
usleep(100000);
}
?>
【问题讨论】:
-
@dqhendricks:“我的提供商默认分配了 100MB”== 共享主机。
-
@dqhendricks, @thirtydot:在 Linux 上使用 WHM。我已经用服务器信息更新了我的问题。通过命令行而不是apache运行它,我不明白你的意思?对不起..
-
@iCeR:您正在测试的测试页有多少字节?
-
您的提供商是否允许您运行二进制文件?使用本机代码执行此操作可以节省大量内存消耗...
-
@thirtydot:814 字节(磁盘上 4,096)
标签: php curl performance virtual-memory