PHP和Apache - flush& ob_flush行为

时间:2016-02-25 14:34:55

标签: php apache ubuntu buffer

我正在使用Apache2,PHP5和Firefox浏览器在我的Ubuntu笔记本电脑中测试ob_flush的一些行为。

以下代码打印0-9的数字并暂停第二次。

每当它回显一个数字时 - 它应该将其刷新回浏览器。

ini_set('output_buffering', 'off');
// Turn off PHP output compression
ini_set('zlib.output_compression', false);

header('Content-type: text/html; charset=utf-8');

echo memory_get_usage() / 1024 / 1024 . "<br>";

echo "The time is " . date("h:i:sa") . "<br>";
echo memory_get_usage() / 1024 / 1024 . "<br>";
for ($i = 0; $i < 10; $i++) {
    echo $i . " - " . memory_get_usage() / 1024 / 1024 . '<br />';
    flush();
    ob_flush();
    sleep(1);
}
sleep(1);
echo 'End ...<br />';
echo "The time is " . date("h:i:sa");

我在两个不同的Firefox窗口中同时运行代码,这是输出:

第一个浏览器窗口:

0.26750183105469
The time is 04:17:09pm
0.26776123046875
0 - 0.26792144775391
1 - 0.26787567138672
2 - 0.26787567138672
3 - 0.26787567138672
4 - 0.26787567138672
5 - 0.26787567138672
6 - 0.26787567138672
7 - 0.26787567138672
8 - 0.26787567138672
9 - 0.26787567138672
End ...
The time is 04:17:20pm

第二个浏览器窗口:

0.26509094238281
The time is 04:17:11pm
0.26535034179688
0 - 0.26551055908203
1 - 0.26546478271484
2 - 0.26546478271484
3 - 0.26546478271484
4 - 0.26546478271484
5 - 0.26546478271484
6 - 0.26546478271484
7 - 0.26546478271484
8 - 0.26546478271484
9 - 0.26546478271484
End ...
The time is 04:17:22pm

你可以清楚地看到这两个请求是由Apache同时处理的,内存使用量是0.26MB。

一切都很好,每个人都开心:)

我将此代码复制粘贴到类的方法中,然后Apache突然不再同时处理请求 - 但是一个接一个地处理。

这是新代码:

ini_set('output_buffering', 'off');
// Turn off PHP output compression
ini_set('zlib.output_compression', false);

header('Content-type: text/html; charset=utf-8');

echo memory_get_usage() / 1024 / 1024 . "<br>";
$task = new TestTask(null);
$task->start();

再次 - 我在2个不同的Firefox窗口中同时发送了请求:

第一个浏览器窗口:

0.26746368408203
The time is 04:20:34pm
2.3088989257812
0 - 2.3089752197266
1 - 2.3089294433594
2 - 2.3089294433594
3 - 2.3089294433594
4 - 2.3089294433594
5 - 2.3089294433594
6 - 2.3089294433594
7 - 2.3089294433594
8 - 2.3089294433594
9 - 2.3089294433594
End ...
The time is 04:20:45pm

第二个浏览器窗口:

0.26506042480469
The time is 04:20:45pm
2.3051910400391
0 - 2.3052673339844
1 - 2.3052215576172
2 - 2.3052215576172
3 - 2.3052215576172
4 - 2.3052215576172
5 - 2.3052215576172
6 - 2.3052215576172
7 - 2.3052215576172
8 - 2.3052215576172
9 - 2.3052215576172
End ...
The time is 04:20:56pm

在这里你可以看到Apache一个接一个地处理它(看一看时间),还有 - 因为我把代码封装在一个类中 - 内存使用率高达2.3MB。

我认为它必须对PHP内存限制(设置为128MB)或允许由Apache并发请求分配的内存量,或者操作系统(Ubuntu)中的某些内容做些什么?限制PHP框架可以分配的内存量?

我将Apache的MaxClients设置为一个非常高的数字 - 以确保它与它无关..

我应该寻找和重新设置哪些或哪些想法?

0 个答案:

没有答案