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

出于某种奇怪的原因,就在今天,我们的服务器在会议开始时决定非常缓慢。 对于每个session_start,服务器在30秒后超时,或者大约需要20秒才能开始会话。 这很奇怪,因为它已经很久没有这样做了(我们的服务器最后一次是在7个月前)。 我试图改变会议运行通过数据库,而且工作正常,但是,因为我们目前的网站build立,它会花上几天去每一页,并改变会议加载包括一个新的会议处理程序。 所以我的问题依然是:

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

我们在24GB内存的专用hetzner服务器上运行,并且运行速度足够快,可以运行一个简单的networking服务器(至less我相信,但我不确定)。 我们使用apache + fastcgi + php5安装程序在服务器上运行debian

服务器不报告多less负载,既不通过服务器状态以及top命令。 Vnstat报告没有任何问题与我们的networking链接(再次,这不会导致缓慢的本地会话处理)。 IOtop报告没有问题的进程接pipe整个硬盘。 如果通过vim完成,那么写入会话文件所在的tmp文件夹的工作就会很快。

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

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

更新 :我从来没有找出什么是错的和/或如何解决它,但问题消失后,我们切换到memcached /数据库会话。

你有没有尝试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 

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

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

问题与功能session_start()(工作缓慢)

当一个脚本正在执行时,会话被PHP锁定,所以如果脚本在同一个会话下堆叠,它们可能会导致这些令人惊讶的长时间延迟。

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

当会话启动被用来恢复一个已经存在的会话时(例如通过cookie标识符),一个大的会话文件(一个内容很多的会话)可能启动缓慢?

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

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