1

私はサイトの故障の問題に直面しています。写真関係のサイトなので。サーバーのメモリのほぼ 95% を使用しています。100% に達すると、サイトはダウンしています。プロファイラーから確認したところ、次の詳細が得られました。

Loading Time: Base Classes   0.0404
Controller Execution Time ( Events / Get Series Images )  10.7655
Total Execution Time   10.8061

MEMORY USAGE : 3,948,864 bytes

詳細は添付ファイルをご覧ください。

ここでデータはJSON を使用して Progress サーバーから取得されます。何がそうさせたのか、私は驚いています。しかし、私の考えでは、作業が完了したときにメモリを解放しないのはなぜですか? CIの別のフォーラムに行きましたが、答えが得られませんでした。

ob_end_flush() 、 ob_flush() 、..を使用しようとしましたが、望ましい結果を得ることができませんでした。私もCIでの使い方がよくわかりません。

問題を解決できることを願っています。よろしくお願いいたします。

私はHMVCを使用しています。

コード

// controller
    public function get_event_images(){    
        // pagination
        $data['current_page'] = @$_GET['page']?@$_GET['page']:1;

        $data['event_id'] = $this->uri->segment(3);   
        $data['event_name'] = urldecode($this->uri->segment(4));  
        $url = JSON_URL."jsread.p?call=treeimg&user=&lang=en&tree=".$data['series_id']."&sort=last&max=".MAX_RECORD."&startpage=".$data['current_page']."&pagesize=".PAGE_SIZE;         
        $json_formated_data =  readJSONURL($url);  

        //extract array of images only
        $data['images'] = getData($json_formated_data);

        $image_stat = getImageStat($json_formated_data);
        $data['total_images']= $image_stat[6];  
        $data['total_rows'] = $image_stat[5];

        $data['main_content'] = 'eventimages';  
        $data['title'] = "Event Images";

        // store series details in session
        $newdata = array(
            'event_id'  =>$data['event_id'],
            'event_name'=> $data['event_name']
        );
        $this->session->set_userdata($newdata);

        $this->load->view('ktmevent/template_page', $data);         
    }



// view
    if(!empty($images)):
        foreach($images as $data):
            echo  "<li>";   
                echo  "<div class=\"image\">";  
                echo "<a href=\"".site_url('events/image_detail/'.$series_id."/".$data['Photono'])."\">";
                echo "<img src=\"http://www.mysite.com".$data['Thumburl']."\" />";
                echo "</a>";
                echo "</div>";
                echo "<div>";
                echo anchor('events/image_detail/'.$series_id.'/'.$data['Photono'], 'Detail');
                echo "</div>";
            echo "</li>";
        endforeach;
    endif;
4

1 に答える 1

2

各アクション中のメモリ使用量を調べることから始めることができます。PHP 関数 memory_get_usage() を使用してメモリを出力するだけです。

http://php.net/manual/en/function.memory-get-usage.php

次に、アプリケーションがメモリ バッファをいっぱいにする原因となるアクションを特定できるはずです。

于 2012-09-12T05:08:40.687 に答える