2012-01-24 50 views
0

我们使用共享服务器(在RackSpace上)进行Magento开发。每个开发者都有自己的沙箱中,但PHP的memory_limit = 512M,当我尝试检查一些对象[与Mage::log($someBigArray)],我得到的失败,以及Apache日志本:共享Magento开发环境需要多少内存?

[Mon Jan 23 15:47:35 2012] [error] [client 208.247.73.130] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 228065281 bytes) in /home/msmith/projects/ref/app/Mage.php on line 761, referer: http://ref.msmith.mage.example.com/checkout/cart/ 

我的老板要增加内存以便我们能做到这种记录。目前我们只有三个开发人员,但我们希望能够增加到15个。在php.ini中为memory_limit设置多少内存以支持共享服务器上的许多开发人员?

回答

1
  1. 正如你一样可以,虽然15个开发者,如果你认为你会带给你的店的业务量,一旦你在世界上推出

  2. 所有的记忆都没有那么多将不会修复您的Allowed memory size of 268435456 bytes exhausted错误。当PHP遇到对象之间的循环递归链接并将无限的字符串表达式假脱机到内存中时,会出现这些错误。 Magento有很多这些循环引用。

+0

那么有什么方法可以安全地将数组的有用部分转储到日志?以'Mage_Checkout_Block_Cart_Totals - > _ totals'为例。 – kojiro

+1

@kojiro识别有用的部分,将它们分成原始类型或简单的一个级别对象/数组。另外,xDebug在开发过程中是一个天赐之物,因为它的var_dump聪明不过于扩展对象。 http://xdebug.org/ –

+0

+1 for xdebug !!使用体面的IDE更好,例如Netbeans或Eclipse或PhpStorm –

0

您尚未使用512MB - 请注意错误日志中指示的允许内存大小。除了PHP.ini之外,Magento至少在我的发行版中(Linux上的BitNami映像)在几个地方设置了内存限制。

在htdocs中我的.htaccess有:

############################################ 
## adjust memory limit 

# php_value memory_limit 64M 
    php_value memory_limit 256M 
    php_value max_execution_time 18000 

这会影响应用程序的大部分。代码中也有一些地方可以用

@set_time_limit(0); 
    @ini_set('memory_limit', '256M'); 

你可以grep这些。

如果你想转储到日志中的大阵是一个Varien_Object,你可以尝试这样的为之倾倒:

Mage::log(
     "My object: " . 
     print_r($object->debug(),true), 
     null, 
     'MyLogfile.log' 
    ); 

调试方法停止无限递归,但这只适用于子类工作Varien_Object。幸运的是,Magento中的许多对象都来自Varien_Object。