2017-07-30 79 views
0

我已經爲我的Joomla網站編寫了自定義組件。 該組件是在PHP中,並基於MVC範例。該組件的工作原理,但經過幾個月的使用後,在一些地區出現此消息:joomla自定義組件內存使用情況

Fatal error: Allowed memory size of XXXXX bytes exhausted (tried to allocate XXX bytes) in XXX\my_sql.php 

我的組件相同的數據庫不同的查詢。該網站有256M像內存限制。我知道我可以將內存增加到512MB,但還有其他方法嗎?我如何理解我的組件使用了多少內存?

謝謝

回答

0

以下將向所有用戶顯示調試信息;因此您可能希望在開發機器上離線執行此操作(製作生產數據庫的副本)。

在配置中啓用調試,然後打開Extensions-Plugins並啓用Debug插件;現在重新加載前端,你會看到時間,內存和查詢的完整列表(你應該看到類似下面的截圖,點擊標題打開它們。如果你沒有看到它,暫時設置其中一個你的網站的默認模板(讓模板設計者知道他忘了包含調試佔位符)

你用盡的內存量是php的,所以你很可能在內存中保留了太多東西。結果集,進行新的查詢以及將結果緩存到對象中,這可能是原因,並且您可以通過在主查詢中一次迭代更少的記錄來快速解決它(這確實是一個骯髒的解決方案,但沒有其他更改通常需要)

一個快速的方法是造成問題

您就可以開始記錄與memory_get_usage()你的記憶,不久你應該能夠指出(希望單),點它生長失控的部分隔離開來。然後應用上述建議來解決它。

joomla debug info

+0

這個擴展已經是活動的,但我沒有看到時間,內存等... – lucacatr

+0

確保你在站點全局配置中啓用調試:你應該看到類似我附在主帖 –

+0

的圖片我會檢查... – lucacatr

0

也許你正在處理大量的數據。啓用Riccardo指示的調試控制檯來測試您的查詢。請檢查您是否正在使用array_push或類似函數來投射大量數據。您也可以使用Xdebug來查看代碼瓶頸的位置。你可以在這裏找到一個指南來設置它Xdebug

+0

是的,我也使用array_push。 array_push有沒有其他選擇? – lucacatr

+0

如果您想要將多個值添加到數組中,那麼只需使用array_push,或者使用$ array [] =更快地添加一個值。 –