關於yii2框架中記憶體洩漏的解決方案

2021-08-07 21:33:42 字數 912 閱讀 4976

現象描述:

命令列執行乙個7萬行的指令碼,迴圈裡進行各種查詢。結果每次都會報出記憶體溢位的錯誤,類似於這樣:

第 475 次,消耗記憶體 312.68mb第 476 次,消耗記憶體 313.22mb第 477 次,消耗記憶體 313.79mb。還是報錯。記憶體溢位。allowed memory size of 402653184 bytes exhausted (tried to allocate 8388616 bytes) (手打日誌記錄)

經過分析,是不是存在沒有及時銷毀的變數,於是銷毀了所有可能會影響效能的變數。然而發現記憶體還是不斷上公升。我很懵逼。

接著我就一段一段的進行除錯,

} 這樣注釋了之後發現,很快就執行完了十幾萬資料。於是還是一段一段的在迴圈裡注釋。這裡可以發現yii框架自帶的這種迴圈大資料還是蠻好用的。

一直查,最終問題定位在乙個這樣的問題裡:

$tb = 'userinfo';

$sql = "select login_num from " . $tb . " where uid = '" . $item['pf_uid'] . "'";

迴圈裡只保留這段**。執行指令碼發現記憶體還是不斷上公升,cpu佔到了50

%。

這個裡面寫的還是研究的比較深入的。

接下來就好辦了。將這裡的查詢換成原始的連線試試。果然,記憶體上公升的非常慢了,可以說這才是正常現象。現在的記憶體也就是50m左右,cpu也穩定在7%左右。

**優化後,再跑指令碼,1分鐘左右吧,指令碼就跑完了。重點是不會再報出記憶體錯誤了。所以,以後考慮問題還是要深入。敢於質疑。以後如果遇到這種記憶體錯誤,一定要先檢查自己的**是不是有記憶體洩漏的地方。不要想著先設定php的記憶體。這樣只會治標不治本。

以上就是我研究兩天的結果。功夫不負有心人啊,加班值了。

yii2框架 yii2自身的自動載入 三

上一節說完了composer的自動載入,下面我們來說一下yii2自身的自動載入。在我們的入口檔案,例如index.php,如下 comment out the following two lines when deployed to production defined yii debug or d...

yii2框架 yii2的asset資源包 十一

link license license use yii web assetbundle author qiang xue since 2.0 定義按需載入css方法,注意載入順序在最後 public static function addcss view,cssfile 將需要載入的檔案已陣列聚合...

yii2框架 yii2的主題化設計 十九

最近發現漏了很重要的一章章節知識點 關於yii2的主題化設計。所謂的主題話設計簡單點說就是通過設定不同的模板主題,可以快速切換,無需更改檢視渲染 的方法。在yii2中使用主題,首先要配置主題,在components中 view theme baseurl web themes blue pathma...