session_start() 需要很长时间

我的网站运行非常缓慢(我不知道为什么)。它基于Zend应用程序,我曾经制作过大约几十个这样的网站,所以我确信我的代码是可以的。

我在服务器上安装了xdebugger,试图分析它,你猜怎么着?php::session_start() 花了 48.675 秒。四十八秒半!这太不可思议了!这可能是什么原因?这是常见的操作,为什么它可以执行这么长时间?如何修复此类行为,要编辑哪些配置?在谷歌上搜索,但没有找到好的答案(几乎到处都有一个问题,但没有答案)。谢谢之前!

xdebugger profiling results


答案 1

session_start(会话存储在文件中)在 PHP 中被阻止,因此,如果您尝试为同一浏览器会话(AJAX 或多个浏览器选项卡/窗口)启动多个服务器会话,则会出现此问题。每个会话都将等到其他会话关闭。session_start

请参阅此处:http://konrness.com/php5/how-to-prevent-blocking-php-requests/

尝试从会话的文件存储更改为数据库存储。


答案 2

我的猜测是垃圾回收例程,它在本机函数中运行。也许您已经做了一些保留许多旧会话文件的事情,例如更改了最长生命周期?或者,也许您已经决定将它们存储在数据库中是一个好主意,但忘记创建合适的索引?本机 GC 例程 stat() 的每个会话文件以检查过期。如果构建了大量文件,这将非常耗时。session_start()

编辑仅帮助您进行调试,请通过临时设置 session.gc-probability 来禁用垃圾回收:

session.gc-probability = 0

确保设置保持不变,我不知道zend框架在这里可能做什么。

附言:在不知道原因的情况下,很难提出修复建议。我的答案旨在指导您确定原因。


推荐