在我们的PHP网站上,我们注意到,如果我在两个单独的选项卡中请求页面,那么第二个选项卡将永远不会开始加载,直到第一个选项卡完成对PHP端的处理(使用LiteSpeed webserver)。这是一个云网络托管,应该能够处理大量的访问者。我们在以前与Apache一起托管时观察到了相同的行为。
该问题是否存在于the服务器配置中?或者在我们的应用程序中,它会阻止处理吗?
发布于 2022-06-10 05:56:14
如果应用程序使用PHP会话(有意或无意),这通常就是行为。
当应用程序调用session_start()时,它会以用户身份为您生成一个会话,并在此会话上执行一个文件锁,直到站点执行完毕为止,然后该锁将被移除,然后等待同一会话的下一个脚本可以继续进行。
如果您不打算将任何数据写入会话,那么尽早调用session_write_close()是有益的,因为这将释放锁,并允许处理其他进程(其他选项卡)。
发生锁定是因为您显然不希望两个进程试图同时写入同一个文件,可能会覆盖写入会话的进程数据之一。
显然,这也可能是应用程序中导致这种情况的原因,但是您必须实际调试代码才能找到答案。您也可以在命令行上使用strace来收集更多信息。
PHP会话锁定在https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/中得到了深入的解释--它只是深入到中,比我上面所做的要详细得多。
https://stackoverflow.com/questions/72568264
复制相似问题