出于某种奇怪的原因,就在今天,我们的服务器决定在 session 开始期间非常慢。对于每个 session_start,服务器要么在 30 秒后超时,要么需要大约 20 秒才能启动 session 。这很奇怪,因为它已经很长时间没有这样做了(我们的服务器上一次这样做是在大约 7 个月前)。我尝试将 session 更改为通过数据库运行,并且效果很好,但是,随着我们当前的网站的构建,每个页面都需要几天时间并更改 session 的加载以包含新 session 处理程序。因此我的问题仍然存在:
为什么这么慢,为什么只是有时?
我们在具有 24GB 内存的专用 hetzner 服务器上运行,CPU 速度快到足以运行一个简单的网络服务器(我相信是 Xeon,但我不确定)。我们使用 apache+fastcgi+php5 设置在服务器上运行 debian。
服务器不会报告太多负载,无论是通过 server-status 还是 top
命令。 Vnstat
报告我们的网络链接没有任何问题(同样,这不会导致本地 session 处理缓慢)。 IOtop
报告进程接管整个硬盘驱动器没有问题。如果通过 vim 完成,写入 session 文件所在的 tmp 文件夹会很快。
再次说明,我主要关心的不是我们是否应该切换到数据库或内存缓存版本的 session ,只是想问为什么会发生这种情况,因为我看的所有内容at 似乎工作正常,除了 PHP 本身。
编辑: 我们的 PHP tmp 目录中的最大文件是 2.9 MB,所以我相信不会有任何影响。
更新:我从来没有弄清楚出了什么问题和/或如何解决它,但是在我们切换到 memcached/db session 后问题就消失了。
最佳答案
你试过 session_write_close();
吗?
这将禁用 session 变量中的可写能力,但您仍然可以从中读取数据。稍后当您需要编写 session 变量时,请重新打开它。
我也遇到过这个问题,但这件事就像一个魅力。这就是我所做的:
session_start(); //starts the session
$_SESSION['user']="Me";
session_write_close(); // close write capability
echo $_SESSION['user']; // you can still access it
关于php - session_start 似乎很慢(但只是有时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385582/