2010-12-05 121 views
0

我想测试我的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%的请求实际发送至关重要,而且他的服务器足够强大,可以毫无问题地处理这些请求。出于安全原因,我无法在服务器上测试它,但我的功能不足以模拟工作条件。

+0

只是简单的说明 - 将数据存储到平面文件(尤其是如果它是单个平面文件)可能会给您在处理同时发生的请求时带来麻烦。这是一个瓶颈。如果您需要将数据记录到中央存储中,可以查看使用数据库(可以处理同时写入)。你如何衡量实际页面负载的数量? – 2010-12-06 00:58:30

回答

0

理想情况下,我会写这些值到一个关键缓存,如memcached实例,然后最终到一个单线程脚本的数据库/平面文件。这将使您能够跟上请求的速度,并且还能够将数据存储到磁盘。

话虽如此,只是使用数据库作为快速解决方法将工作。

0

如果您需要复杂的请求信息,数据库绝对是最好的选择。

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