2012-01-24 49 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。