【问题标题】:Symfony2 - Random Failed to start the sessionSymfony2 - 随机无法启动会话
【发布时间】:2015-10-21 14:58:33
【问题描述】:

我们有一个使用 Symfony2 的网站,有一些流量。

网站每天都会因此错误而失败 1 或 2 分钟(15-20 个错误)。这发生在随机时间,找不到模式。它甚至不适合高峰时段。

2015-10-09 02:23:57.635 [2015-10-09 06:23:38] request.CRITICAL: Uncaught PHP Exception RuntimeException: "Failed to start the session" at /var/www/thing.com/httpdocs/app/cache/prod/classes.php line 121 {"exception":"[object] (RuntimeException(code: 0): Failed to start the session at /var/www/thing.com/httpdocs/app/cache/prod/classes.php:121)"} []

似乎不是双头问题或双头问题。 网站不会与任何可能会干扰会话的 PHP 遗留代码进行交互。

会话存储在数据库中,因此文件问题被丢弃。 降低了会话持续时间,因此会话表不会变得太大并且问题仍然存在。

认为这可能是 HWIOAuthBundle 的问题,它是 facebook 登录,但找不到冲突在哪里。

此外,该站点使用大量的 render_esi 来缓存 Symfony2 内部缓存系统。

更新 ---------------------------------- ---

清空了旧会话文件的 /var/lib/php/sessions 文件夹,而不是没有使用。

降低了会话寿命。 session 表中的 Sql 条目从 ~300 万增加到 ~130 万。

似乎问题已经消失了,但这并不是真正的解决方案。 我的猜测是symfony2中的pdo_handler有性能问题。

也许对这件事有更多了解的人(pdo_handler,表优化)可以为高流量指出一个真正的解决方案。

【问题讨论】:

    标签: symfony session


    【解决方案1】:

    您的 PHP 安装将会话保存到哪里?

    [假设您有 CLI 访问权限,您可以在 php.ini 文件的 session.save_path 设置中找到它]

    很可能 PHP 使用了您的服务器 /tmp 文件夹。如果此文件夹已满,则 PHP 无法创建新会话。

    您可以通过以下方式查看 /tmp 文件夹的当前大小:

    du -ch /tmp/ |grep total
    

    如果 /tmp 文件夹通常位于其自己的分区上,则可以通过以下方式查看其最大大小:

    df -h
    

    某些程序可能会突然消耗此文件夹的 Gbs 以达到其目的。

    【讨论】:

    • 可能在做某事。文件夹 /var/lib/php/session 为 6.3 GB。为什么我们在数据库中使用 symfony2 会话时会存储这么多 PHP 会话?
    • 这确实是 LOT 的会话数据。您在会话中存储了什么?
    • 此页面可能会让您走上正确的道路:symfony.com/doc/current/cookbook/session/…
    • @Nodens:如果你有那么多会话数据,显然垃圾收集不起作用。 (GC 指的是在这种情况下删除旧会话。)所以 PHP 本身没有设置为垃圾收集旧会话(即有一些独立的 cronjob)。或者它在错误的文件夹中查找,而不是 Symfony 放置它的文件夹。
    • 删除了 /var/lib/php/session 的全部内容,现在它是空的。没有创建新文件,但突然出现的错误仍然存​​在。我猜大会话文件夹不是问题。仍在搜索。
    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2013-11-27
    • 2017-05-29
    • 2014-07-14
    • 1970-01-01
    相关资源
    最近更新 更多