PHP5中readfile()函数的性能


Performance of the readfile() function in PHP5

我遇到了一些问题,在浏览器中下载开始的速度出现延迟(不是下载速度,而是单击下载链接和下载出现在浏览器中之间的时间)。

我已经尽可能简化了我的代码;

$filepath = $this->_resourceFile;
ob_start(); 
$start = microtime(true);
readfile($filepath);
$end = microtime(true) - $start; 
Mage::log('Time taken to serve file was '.$end);

(你会看到这是Magento的一部分,我对Magento提供可下载产品文件的方式进行了大量编辑,试图加快速度。这在大多数情况下都有效,但我仍然遇到问题)

我放置的日志如下所示;

2014-10-23T14:19:15+00:00 DEBUG (7): Time taken to serve file was 0.067724943161011
2014-10-23T14:24:48+00:00 DEBUG (7): Time taken to serve file was 0.069678068161011
2014-10-23T14:25:58+00:00 DEBUG (7): Time taken to serve file was 0.080054998397827
2014-10-23T14:26:28+00:00 DEBUG (7): Time taken to serve file was 0.067059993743896
2014-10-23T14:27:27+00:00 DEBUG (7): Time taken to serve file was 0.068262100219727
2014-10-23T14:30:08+00:00 DEBUG (7): Time taken to serve file was 0.066760063171387
2014-10-23T14:36:34+00:00 DEBUG (7): Time taken to serve file was 90.616213083267
2014-10-23T14:45:11+00:00 DEBUG (7): Time taken to serve file was 0.065201997756958
2014-10-23T14:45:22+00:00 DEBUG (7): Time taken to serve file was 0.073112010955811
2014-10-23T14:46:56+00:00 DEBUG (7): Time taken to serve file was 87.481207132339
2014-10-23T14:47:44+00:00 DEBUG (7): Time taken to serve file was 36.195640087128
2014-10-23T14:47:48+00:00 DEBUG (7): Time taken to serve file was 0.067437887191772
2014-10-23T14:48:01+00:00 DEBUG (7): Time taken to serve file was 0.068021059036255
2014-10-23T14:48:06+00:00 DEBUG (7): Time taken to serve file was 0.028129100799561
2014-10-23T14:48:13+00:00 DEBUG (7): Time taken to serve file was 0.067390918731689
2014-10-23T14:49:00+00:00 DEBUG (7): Time taken to serve file was 0.065808057785034
2014-10-23T14:49:06+00:00 DEBUG (7): Time taken to serve file was 0.06847882270813
2014-10-23T14:49:48+00:00 DEBUG (7): Time taken to serve file was 0.063234090805054
2014-10-23T14:50:03+00:00 DEBUG (7): Time taken to serve file was 0.059723138809204
2014-10-23T14:50:08+00:00 DEBUG (7): Time taken to serve file was 0.068203926086426
2014-10-23T14:50:13+00:00 DEBUG (7): Time taken to serve file was 0.065500974655151
2014-10-23T14:50:16+00:00 DEBUG (7): Time taken to serve file was 0.064054012298584
2014-10-23T14:50:20+00:00 DEBUG (7): Time taken to serve file was 0.068597078323364
2014-10-23T14:50:24+00:00 DEBUG (7): Time taken to serve file was 0.026658058166504
2014-10-23T14:51:47+00:00 DEBUG (7): Time taken to serve file was 0.065510988235474
2014-10-23T14:51:56+00:00 DEBUG (7): Time taken to serve file was 0.06929087638855
2014-10-23T14:52:00+00:00 DEBUG (7): Time taken to serve file was 0.026684999465942
2014-10-23T14:52:32+00:00 DEBUG (7): Time taken to serve file was 0.067147016525269
2014-10-23T14:55:55+00:00 DEBUG (7): Time taken to serve file was 0.067998886108398

你会看到,在0.06…中有90秒的等待,87秒的等待和36秒的等待。是什么导致了这些尖峰?

该站点运行在Linux服务器上,带有apachenginx,带有PHP5.3.3。可能是服务器负载问题吗?我认为用户带宽几乎与延迟无关,这是对的吗?

因此,经过大量调查,似乎是服务器问题。

服务器在第一次访问文件时将其存储在RAM中,以加快将来的访问速度。是将文件复制到RAM所花费的时间导致了延迟——一旦文件在RAM中,就会立即送达。

我们已经更改了服务器上的IO资源设置,最初的下载时间从90秒降到了6秒。