【问题标题】:session_start seems to be very slow (but only sometimes)session_start 似乎很慢(但只是有时)
【发布时间】:2012-05-10 06:21:16
【问题描述】:

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

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

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

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

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

编辑: 我们的 PHP tmp 目录中的最大文件是 2.9 MB,所以我相信不会有任何影响。

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

【问题讨论】:

  • 查看您的tmp 目录。 PHP 将它的会话存储在那里。看看有没有什么问题。
  • 磁盘或文件系统可能有问题?
  • “在每个页面上都需要几天的时间来更改会话的加载以包含新的会话处理程序”如果是这种情况,您应该认真考虑首先解决这个问题
  • RepWhoringPeeHaa @ 正如我所提到的,我肯定会这样做。我的工作已经进入系统,所以很遗憾我还没有创建应用程序所拥有的会话管理。这也不是我们需要解决的问题,因为如上所述,超过 7 个月没有问题。
  • 您认为最近是否有任何更改导致了这种行为?您能否查看昨天的日志文件的最后一部分,看看是否记录了指示故障的内容?

标签: php apache session debian fastcgi


【解决方案1】:

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

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

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

【讨论】:

  • 我们的 tmp 文件夹中最大的文件是 2.9MB,所以没有什么应该产生影响。
【解决方案2】:

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

Problem with function session_start() (works slowly)

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

【讨论】:

  • 我希望这会简单地修复它,但是如果它只是一个锁定的会话文件,那么它是如何发生在网站上的每个用户身上的(包括从我们办公室在不同计算机上的访问),这很奇怪。也许是因为我们使用了文本文件,因此它使用了 same 文件,被锁定了?
【解决方案3】:

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

【讨论】:

  • 谢谢。我至少认为它现在有效。速度更快,还没有完全减速:)
【解决方案4】:

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

【讨论】:

  • 我完全同意这个解决方案。但为什么我不知道。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

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

    我的会话需要很长时间才能开始和结束,现在它们是即时的。

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2018-12-18
      相关资源
      最近更新 更多