session_start似乎很慢(但只是有时)

2022-08-30 14:57:06

由于一些奇怪的原因,就在今天,我们的服务器决定在会话开始期间非常慢。对于每session_start,服务器要么在 30 秒后超时,要么需要大约 20 秒才能启动会话。这很奇怪,因为它已经很长时间没有这样做了(我们的服务器上一次这样做是在大约7个月前)。我试图将会话更改为通过数据库运行,这工作正常,但是,随着我们当前网站的构建,需要几天的时间才能在每个页面上进行更改会话的加载以包含新的会话处理程序。因此,我的问题仍然是:

为什么它这么慢,为什么只是有时?

我们在一个专用的hetzner服务器上运行,具有24GB的RAM,并且CPU足够快,可以运行一个简单的Web服务器(我相信是Xeon,但我不确定)。我们在服务器上运行 debian,使用 apache+fastcgi+php5 设置。

服务器不会报告太多负载,也不会通过服务器状态和命令报告。 报告我们的网络链接没有任何问题(同样,这不会导致本地会话处理缓慢)。 报告进程接管整个硬盘没有问题。如果通过 vim 写入会话文件所在的 tmp 文件夹,则操作速度很快。topVnstatIOtop

同样,为了清楚起见,我在这里主要关心的不是我们是否应该切换到数据库或内存缓存版本的会话,而只是问为什么会发生这种情况,因为我看的所有内容似乎都工作正常,除了PHP本身。

编辑:我相信,PHP tmp目录中的最大文件是2.9 MB,所以没有什么应该产生影响的。

更新:我从来没有弄清楚出了什么问题和/或如何解决它,但是在我们切换到memcached / db会话后,问题消失了。


答案 1

你试过吗?这将禁用会话变量中的可写功能,但您仍然可以从中读取数据。稍后,当您需要编写会话变量时,请重新打开它。session_write_close();

我也遭受了这个问题的困扰,但这个东西就像一个魅力。这就是我所做的:

session_start(); //starts the session
$_SESSION['user']="Me";
session_write_close();   // close write capability
echo $_SESSION['user']; // you can still access it

答案 2

我遇到了同样的问题:突然服务器花了30秒来执行一个请求。我注意到这是因为session_start()。第一个请求速度很快,但每个下一个请求需要大约 30 秒才能执行。我发现c:\wamp\tmp中的会话文件被第一个请求锁定了大约30秒。在此期间,第二个请求正在等待文件解锁。我发现它与rewrite_mod.htaccess有关。我禁用了rewrite_mod并注释掉了.htaccess中的每一行,它再次像一个魅力一样工作。我不知道为什么会发生这种情况,因为我不记得在wamp上更改了任何设置或混淆。


推荐