503 清除缓存后 Magento 服务暂时不可用

Posted

技术标签:

【中文标题】503 清除缓存后 Magento 服务暂时不可用【英文标题】:503 Service Temporarily Unavailable on Magento after Clearing Cache 【发布时间】:2016-01-27 09:03:09 【问题描述】:

在管理员下清除 Magento 中的缓存后,出现 503 错误,“服务暂时不可用”。需要明确的是,这是由清除缓存引起的,'var/cache'。这与可能导致相同或相似问题的维护问题无关(已通过删除maintenance.flag 文件解决)。应用程序的根目录中不存在维护标志。我试过研究这个问题,似乎每个帖子都提到了维护问题。

需要注意的一点; 503 错误是 Web 服务器生成的。维护问题返回 503 但它是应用程序(Magento)返回它;这样您就可以看到应用程序徽标、链接等。

我检查了 Web 服务器日志,并且正在生成以下错误:

539 access forbidden by rule, client: 165.225.138.177, server: , request: "POST /app/etc/local.xml HTTP/1.1"

我检查了文件,在我看来这显然是由于所有权冲突造成的;我更改了文件所有者,但问题仍然存在。

检查 Magento 错误日志,var/reports,我看到以下错误:

the error log (var/reports) reflects the following error: "Mage registry key "_singleton/" already exists"

完整的错误是:

a:5:i:0;s:46:"Mage registry key "_singleton/" already exists";i:1;s:1157:"
#0 /data/html/app/Mage.php(223): Mage::throwException('Mage registry k...')
#1 /data/html/app/Mage.php(477): Mage::register('_singleton/', false)
#2 /data/html/app/code/core/Mage/Core/Model/Factory.php(81): Mage::getSingleton(false, Array)
#3 /data/html/app/code/core/Enterprise/UrlRewrite/Model/Url/Rewrite.php(94): Mage_Core_Model_Factory->getSingleton(false)
#4 /data/html/app/code/core/Enterprise/UrlRewrite/Model/Url/Rewrite/Request.php(114): Enterprise_UrlRewrite_Model_Url_Rewrite->loadByRequestPath(Array)
#5 /data/html/app/code/core/Enterprise/UrlRewrite/Model/Url/Rewrite/Request.php(58): Enterprise_UrlRewrite_Model_Url_Rewrite_Request->_loadRewrite()
#6 /data/html/app/code/core/Mage/Core/Model/Url/Rewrite/Request.php(116): Enterprise_UrlRewrite_Model_Url_Rewrite_Request->_rewriteDb()
#7 /data/html/app/code/core/Mage/Core/Controller/Varien/Front.php(165): Mage_Core_Model_Url_Rewrite_Request->rewrite()
#8 /data/html/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#9 /data/html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#10 /data/html/index.php(83): Mage::run('default', 'store')
#11 main
";s:3:"url";s:1:"/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";

任何人都可以就可能导致这种情况的原因提供任何意见吗?

【问题讨论】:

在服务器上生成 500 个错误,首先检查 Web 服务器错误日志。这些通常是导致网络服务器本身崩溃的硬错误。 我已经用这方面的信息更新了帖子。我确实检查了日志;并发布了错误。 【参考方案1】:

首先,这更适合谷歌的后代,请绝对确保

根文件夹中没有maintenance.flag文件 您的错误不是 Web 服务器生成的(将 test.txt 添加到根目录并确保您可以访问它)

假设您已完成上述操作 - 库存 Magento 系统不会在很多地方返回 503 错误。第 1 步应该检查以下内容

异常消息的 PHP/Web 服务器错误日志 Magento var/log/exception.log 异常日志 Magento var/log/system.log 异常日志 Magento var/report 错误报告文件

关于错误的任何特定上下文。第三方扩展很可能会产生 503。

这是 Magento 安装(CE 和 EE)中的一些东西,它们会产生 503 错误(EE 代码被排除在外,因为担心不明确的许可/公平使用)

如果您将 Redis 用作缓存服务器并且其锁定系统不堪重负,系统可能会开始产生 503 错误。

#File: app/code/community/Cm/RedisSession/Model/Session.php
// Limit concurrent lock waiters to prevent server resource hogging
if ($waiting >= $this->_maxConcurrency) 
    // Overloaded sessions get 503 errors
    $this->_redis->hIncrBy($sessionId, 'wait', -1);
    $this->_sessionWritten = TRUE; // Prevent session from getting written
    $writes = $this->_redis->hGet($sessionId, 'writes');
    if ($this->_logLevel >= 4)
    
        Mage::log(
            sprintf("%s: Session concurrency exceeded for ID %s; displaying HTTP 503 (%s waiting, %s total requests)\n  %s (%s - %s)",
                $this->_getPid(),
                $sessionId, $waiting, $writes,
                Mage::app()->getRequest()->getRequestUri(), Mage::app()->getRequest()->getClientIp(), Mage::app()->getRequest()->getHeader('User-Agent')
            ),
            Zend_Log::WARN, self::LOG_FILE
        );
    
    require_once(Mage::getBaseDir() . DS . 'errors' . DS . '503.php');
    exit;

如果找不到订单,PayPal IPN 控制器端点将抛出 503

#File: app/code/core/Mage/Paypal/Model/Ipn.php
if (empty($this->_order)) 
    // get proper order
    $id = $this->_request['invoice'];
    $this->_order = Mage::getModel('sales/order')->loadByIncrementId($id);
    if (!$this->_order->getId()) 
        $this->_debugData['exception'] = sprintf('Wrong order ID: "%s".', $id);
        $this->_debug();
        Mage::app()->getResponse()
            ->setHeader('HTTP/1.1','503 Service Unavailable')
            ->sendResponse();
        exit;
        
    //...

企业版可以返回503

app/code/core/Enterprise/Staging/Model/Observer.php

如果内容暂存配置值为 true。

EE 也可以在

中返回 503
app/code/core/Enterprise/WebsiteRestriction/Model/Observer.php

如果您在私人销售模式下运行并且无权查看销售。

【讨论】:

文本文档可访问且维护标志不存在。 错误日志 (var/reports) 反映以下错误:“Mage 注册表项“_singleton/”已存在” 如何检查内容暂存配置值是否为真?因为我无权访问管理控制台。可以从数据库中检查吗? @Gedalya 它是否反映了与您的 503 相关的以下错误?或者那只是一个旧的报告文件? 我相信这是相关的。例如,我删除了所有错误,然后刷新了页面; '_singleton' 错误一直被复制。一些在线阅读表明它与缓存问题有关,但我没有解决方案。【参考方案2】:

我已经更正了这个问题。经过一番挖掘,我终于找到了一个 Stack 帖子(在同一主题的许多帖子中),它具有以下解决方案。你可以在这里阅读这篇文章: https://magento.stackexchange.com/questions/51598/mage-registry-key-singleton-weee-observer-already-exists

建议执行以下命令:

php -f shell/compiler.php disable
php -f shell/compiler.php clear
php -f shell/compiler.php compile

我玩弄了这个;包括启用/禁用,然后我删除了缓存var/cache。当我重新运行该页面时,它起作用了。

非常感谢所有发帖的人;我觉得一切都有帮助,因为我排除了问题并找到了这个解决方案。

【讨论】:

如果它解决了您的问题,请接受您的答案作为正确答案。谢谢。【参考方案3】:

除了已经提出的建议之外,您可能还需要检查您的服务器是否有可用磁盘空间。我刚遇到这个问题,我花了 15 分钟才意识到唯一的问题是自动备份后的可用空间。

【讨论】:

以上是关于503 清除缓存后 Magento 服务暂时不可用的主要内容,如果未能解决你的问题,请参考以下文章

phpinfo() 导致 503 服务暂时不可用错误

Openshift - 当我访问应用程序时 503 服务暂时不可用

使用 cPanel 传输工具移动后,旧服务器上出现错误 503(服务不可用)

503服务暂时不可用jenkins x中的nginx / 1.13.9

HTTP 503 错误 – 服务不可用 (Service unavailable)

清漆 503 服务不可用