我们正在使用共享服务器(在RackSpace上)进行Magento开发。每个开发人员都有自己的沙箱,但是PHP的memory_limit = 512M
当我尝试检查某些对象[使用Mage::log($someBigArray)]
时,我会收到失败,并且Apache会记录下来:
[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
设置多少内存以支持共享服务器上的许多开发人员?
答案 0 :(得分:1)
尽可能多,但如果您考虑一旦启动后将为您的商店带来的流量,那么15位开发人员并不是那么多
世界上的所有内存都无法解决您的 Allowed memory size of 268435456 bytes exhausted
错误。当PHP遇到对象之间的循环递归链接并保持将无限字符串表示假脱机到内存中时,会出现这些错误。 Magento有很多这些循环引用。
答案 1 :(得分: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');
你可以贪图这些。
如果您想要转储到日志的大型数组是Varien_Object,您可以尝试像这样转储它:
Mage::log(
"My object: " .
print_r($object->debug(),true),
null,
'MyLogfile.log'
);
debug方法停止无限递归,但这只适用于Varien_Object的子类。幸运的是,Magento中的许多对象都是从Varien_Object派生的。