我们使用共享服务器(在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
设置多少内存才能在共享服务器上支持这么多开发人员?
-
尽可能多,尽管如果你考虑到一旦你推出,你将为你的商店带来的流量,15名开发者并不是那么多
-
世界上所有的内存都无法修复您的
Allowed memory size of 268435456 bytes exhausted
错误。当PHP遇到对象之间的循环递归链接并不断将无限字符串表示假脱机到内存中时,就会出现这些错误。马根托有很多这样的循环参考文献。
您还没有使用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'
);
调试方法停止无限递归,但这只适用于Varien_Object的子类。幸运的是,Magento中的许多对象都源自Varien_Object。