2010-12-29 10 views
0

PHPでメモリをリークしているXML解析スクリプトに問題が発生しています。PHPのメモリリークに関する質問

私はOOPコード全体をデータベースチェックと挿入である非OOPに書き直して解決策を作りましたが、それは穴を埋め尽くすようでしたが、何が原因なのか不思議です。私はZend Frameworkを使用しています。一度モデルのすべてを削除すると、リークはありません。

ちょうどあなたとそれがどれほど悪いかを教えてください: 私は同数のファイルで30kのアイテムをいくつか実行しています。したがって、ファイルごとに1つ。それは5MBを使用して始めた!ファイル自体が約20kbの大きさだったときには、

私が読んだことのある関数を参照しているのでしょうか?そのバグが修正されたと思ったのですか?

EDIT

私はリークがZend Frameworkのデータベースクラスを使用したためであったこと、が分かりました。それはリソースをクリアするように、各反復後にシャットダウン関数を呼び出す方法はありますか?

答えて

1

私たちは作業するコードがないので、これに答えるのはかなり難しいです。

戻ってあなたの元のOOPのバージョンに戻すと、そのような小さなクラスを作成:アプリケーション内で、その後

abstract class MemoryLeakLogger 
{ 
    public static $_logs = array(); 

    public function Start($id,$action) 
    { 
      self::$_logs[$id] = array(
       'action' => $action, 
       'start_ts' => microtime(), 
       'memory_start' => memory_get_usage() 
     ); 
    } 

    public function End($id) 
    { 
      self::$_logs[$id]['end_ts'] = microtime(); 
      self::$_logs[$id]['memory_end'] = memory_get_usage(); 
    } 

    public static function GetInformation(){return self::$_logs;} 
} 

とは、次の操作を行います。アプリケーション全体

MemoryLeakLogger::Start(":xml_parse_links_set_2", "parsing set to of links"); 
/* 
    * Here you would do the relative code 
*/ 
MemoryLeakLogger::End(":xml_parse_links_set_2"); 

そしてなどをスクリプトが完了した後で、読み込み可能な方法で情報を出力し、ピークを探すことによって情報をデバッグするだけで、メモリ使用量とアクションごとの時間のオフセットを集計する計算を作成する必要があります。

xdebugを使用してアプリケーションをトレースすることもできます。

希望すると便利です。