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

时间:2015-10-27 19:15:53

标签: magento caching http-status-code-503

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

有一点需要注意; 503错误是Web Server生成的。维护问题返回503但是应用程序(Magento)返回它;所以你看到应用程序徽标,链接等等。

503 Error

我已检查过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";}

任何人都可以提供有关可能导致此问题的任何意见吗?

3 个答案:

答案 0 :(得分:7)

首先,对谷歌的后代来说更是如此,绝对确定

  • 根文件夹
  • 中没有maintenance.flag个文件
  • 您的错误不是网络服务器生成的(向根添加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;
    }    
    //...
}

Enterprise Edition可以返回503 in

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

如果内容分段配置值为true。

EE也可以返回503 in

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

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

答案 1 :(得分:4)

我已经纠正了这个问题。经过一番挖掘后,我终于找到了一个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。当我重新运行页面时,它工作。

非常感谢所有发布的人;当我排除问题并找到解决方案时,我觉得一切都有所帮助。

答案 2 :(得分:0)

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