快速记录请求

时间:2010-12-05 23:13:04

标签: php logging curl performance curl-multi

我正在尝试测试我的PHP脚本,它创建了48个cURL多句柄,每个句柄包含大约1500个请求,所有这些都是并行执行的。我正在尝试确保所有请求都已实际发送,并且这样做,我正在我的服务器上记录请求。这是我的dump.php,我用我的脚本发出请求,它会将请求记录到文件中:

<?php
ob_start();
echo $_SERVER["REQUEST_URI"];
$dump = ob_get_clean();
$log = "dump.txt";
$fh = fopen($log, 'a') or die("can't open file");
fwrite($fh, $dump . "\r\n\r\n");
fclose($fh);

echo "Dump Completed";
?>

然而,我的四核PC能够以每10秒1500左右的速率发出这些请求,并且很可能在我尝试同时打开文件时使服务器过载。我发送每个请求之间的延迟为0.1秒,但我的服务器,我认为仍然无法打开文件,转储文本,并在下一个请求到达之前关闭它。结果,我的PHP文件说大约有72k的请求被发送,但是我的服务器说只收到了大约14k的请求。这可能是由于我的PHP程序超载了我的PC或端口系统,有些请求从未成功发送过,或者我的服务器速度不够快,无法一秒钟处理150个请求。

尝试安全地知道我的所有请求都已发送的任何可能的解决方案?当我的客户端使用脚本时,必须至少99.5%的请求实际发送,并且他的服务器足够强大,可以毫无问题地处理它。出于安全考虑,我无法在他的服务器上进行测试,但我的功能还不足以模拟工作条件。

2 个答案:

答案 0 :(得分:0)

理想情况下,我会将这些值写入密钥缓存(例如memcached实例),然后最终写入具有单线程脚本的数据库/平面文件。这将使您能够快速跟上请求,并能够将数据存储到磁盘。

话虽如此,只需使用数据库作为快速解决方法就可以了。

答案 1 :(得分:0)

如果您需要有关请求的复杂信息,那么数据库绝对是最佳选择。

如果你关心的只是计数,我推荐一个Membase(http://www.membase.org/downloads)计数器,使用Memcache原子添加操作(http://php.net/manual/en/ memcache.add.php)