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

时间:2012-04-30 14:45:06

标签: php apache session debian fastcgi

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

为什么这么慢,为什么有时呢?

我们在一台专用的hetzner服务器上运行24GB的ram,CPU速度足以运行一个简单的网络服务器(我相信Xeon,但我不确定)。我们使用apache + fastcgi + php5 setup在服务器上运行debian。

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

同样,为了清楚说明,我的主要关注点不是我们是否应该切换到数据库或内存缓存版本的会话,只是问为什么会发生这种情况,因为我看了一下似乎工作正常,除了PHP本身。

修改: PHP tmp目录中的最大文件是2.9 MB,所以我认为没有什么可以产生影响。

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

6 个答案:

答案 0 :(得分:15)

你试过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

答案 1 :(得分:5)

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

答案 2 :(得分:2)

我也遇到了这个问题。在这里回答:

Problem with function session_start() (works slowly)

当一个脚本正在执行时,会话被PHP锁定,因此如果脚本堆叠在同一个会话中,则会导致这些令人意外的长时间延迟。

答案 3 :(得分:0)

每个会话都由apache存储为文本文件。

当会话开始用于恢复现有会话时(例如通过cookie标识符),一个大的会话文件(内部有很多内容的会话)可能会很慢启动?

如果是这种情况,那么应用程序可能会将大量数据放入会话中。

答案 4 :(得分:0)

请检查您是否有正确的内存缓存设置,例如在/etc/php.d/memcached.ini

答案 5 :(得分:0)

我知道这是一个老问题,但我刚刚在我的服务器上解决了这个问题。我所做的就是为cpanel中缓存管理器中的域打开旁路缓存。

我的会话花了很长时间才开始和关闭,现在它们是即时的。