yii 2フレームワークにおけるメモリ漏洩の解決策について

2147 ワード

現象説明:コマンドラインは7万行のスクリプトを実行し、ループ内で様々なクエリーを行います.その結果、メモリオーバーフローのエラーが毎回報告され、475回目、消費メモリ312.68 MB 476回目、消費メモリ313.22 MB 477回目、消費メモリ313.79 MBと同様である.やはり新聞が間違っている.メモリオーバーフロー.Allowed memory size of 402653184 bytes exhausted(tried to allocate 8388616 bytes)(手打ログ記録)
タイムリーに破棄されていない変数が存在するかどうかを分析し、パフォーマンスに影響を与える可能性のあるすべての変数を破棄しました.しかし、メモリが上昇していることがわかりました.私はとても愚かだ.次にデバッグを行い、
foreach ($query->batch(100, Yii::$app->slave_db_ss) as $items)
{
    //100     ...
     $upt_data = [];
     foreach ($items as $item){
                    ... //        
      }
} 
         ,            。               。      yii                  。

最終的な問題は次のような問題に位置づけられています.
$tb = 'userinfo';
$sql = "select login_num from " . $tb . " where uid = '" .  $item['pf_uid'] . "'";
$login_info = Yii::$app->slave_db_passport->createCommand($sql)->queryOne();
          。              ,cpu   50%。

そこで走って行って私たちのボスに聞いて、人は結局砂場を経験した.すぐに彼は私のコードを見終わって、ここに位置しました.そこで彼はyii 2フレームワークが自分でメモリを解放しないのではないかと仮定した.そして私はgoogleに降りました.やはり、高い人が多いですね.ここにリンクを置きます.
http://www.yiichina.com/tutorial/1397この中に書いてあるのはやはり研究が深いです.
これからはやりやすいです.ここのクエリーを元の接続に変更してみてください.やはり、メモリの上昇が非常に遅いのが普通といえます.現在のメモリは50 m程度で、cpuも7%程度安定しています.コードを最適化してから、スクリプトを走って、1分ぐらいでスクリプトが終わります.メモリエラーを報告しないことがポイントです.だから、これからも問題を深く考えなければなりません.敢えて疑う.後でこのようなメモリエラーが発生した場合は、必ず自分のコードがメモリ漏れの場所であるかどうかをチェックしなければなりません.phpのメモリを先に設定することを考えないでください.これでは根本を治すことができないだけだ.以上が私が2日間研究した結果です.カンフーは気にしないでください.残業は価値があります.