更新到PHP 7后的会话锁定

时间:2016-03-28 18:15:52

标签: php apache session nginx php-7

我更新到PHP 7后,我的PHP框架面临着非常奇怪的问题。 我认为问题是塞申斯。 这是我面临的问题:当我向我的网站发送第一个请求时,它会在80毫秒内响应。 1秒后,我再次呼叫同一页面,需要大约3-4秒才能响应,1秒钟后再需要一个请求,大约需要10秒才能响应。但如果我等待20-30秒并重新调用该页面,它将在80ms内再次响应。 所以我做了一些调试,我意识到当我使用session_write_close函数时,它总是需要80毫秒来响应并且工作得非常快。因此,如果没有session_write_close,我的会话就会锁定,即使脚本结束,我也要等待20-30秒再次调用它以获得快速响应。由于会话的原因,持续刷新页面的响应时间越来越高。

那么为什么会这样呢?第一次我遇到这样的问题。我只向我的会话写了100kb的数据。

首先我认为这是因为我的硬盘有问题,所以我将会话路径更改为ram光盘。但响应时间没有任何变化。

我完全删除了Apache并安装了新的nginx服务器。好事对于nginx,我的第二个请求不需要10秒钟响应,但仍然需要等待1-2秒才能响应,但仍然不会像我使用session_write_close那样快。当我在nginx上使用session_write_close时,它的工作也很完美。

还尝试删除apache 2.2并安装apache 2.4。但没机会。

顺便说一句,它发生在我的prod服务器上。它有Apache 2.2(也尝试过2.4)和PHP 7.0.4以及非常强大的CPU和128GB内存,默认配置文件和mod_rewrite启用。  Opcache和memcache也启用了。 (我也尝试过逐个禁用和重新启用缓存,但没有任何更改)

有趣的是认为它在我的测试服务器上超高速工作,这个服务器已有10年历史,8GB内存。它有PHP 5.4。

编辑:我在我的框架上使用ob_start()ob_get_clean()函数。

ob_start()
.....
.....
all requests, framework calls etc.
.....
.....
 ob_get_clean();
.....
show the page to user.

编辑2: Zend的联合创始人和PHP的Ze-Suraski的共同架构师在twitter上回答了我的问题“手头无知”。所以我可以自杀:)

编辑3:我认为它是关于ob_start()ob_flush(),当我删除它时,它总是会快速进入。 此致

编辑4:我将我的prod服务器降级为Php 5.6。现在它的工作正常。我不知道为什么但是Ob_函数与PHP 7上的会话处理之间存在关系。它使我的框架变慢。我怎么知道的?当我在session_write_close()之前使用ob_start()时,它的速度非常快。 session_write_close()函数,它也可以快速运行,而不是ob_

0 个答案:

没有答案