【PHPEXCEL】メモリオーバーフロー最適化プロセス

2659 ワード

最近、当社のプロジェクトでexcelをエクスポートするときにメモリオーバーフローエラーが発生することがあります.テストにより、データ量が5000個以上ある場合にこの問題が発生することがわかりました(デフォルトphp.ini memoryは128 Mです).
Allowed memory size of 134217728 bytes exhausted (tried to allocate 43 bytes)

メモリオーバーフローの問題を解決する方法は次のとおりです.
  • メモリを追加し、phpを変更します.ini中memory_limitまたは@ini_set('memory_limit','256M')
  • PHPEXCELライブラリはキャッシュの使用をサポートします具体的なキャッシュの使用はphpExcelの大きいデータ量の情況の下でメモリがあふれて解決します
  • を見てください
  • メモリが急激に増加した原因を特定する
  • シナリオ1とシナリオ2は非常に簡単で乱暴ですが、根本に触れていません.なぜメモリが溢れているのか、技術者として土鍋を割って最後まで聞くべきです.
    この文書では、メモリオーバーフローの問題をトラブルシューティングし、修復する方法について簡単に説明します.

    操作手順


    ビジネス概略ロジック


    ①クエリー・データベース条件を満たすすべてのデータを取り出す
    ②条件を満たすデータを循環し、データ処理を行い、新しい配列に入れる
    ③PHPEXCELライブラリを使用してexcelテーブルを生成する

    Debug


    phpのmemory_を借りてget_USage関数メモリ使用状況の表示
     1:8M 
     ①
     2:47M
     ② 
     3:82M
     ③
     4:140M

    上の図から私たちは以下の結論を出すことができる.
    ビジネスロジック①消費メモリ:39 M=47 M-8 M
    ビジネスロジック②消費メモリ:35 M=82 M-47 M
    ビジネスロジック③消費メモリ:58 M=140 M-82 M

    ビジネスロジックの最適化③


    ビジネスロジックの記述から見ると、ビジネスロジック1は最適化されず、クエリーデータベースシステムは必然的にオーバーヘッドする.最初に思いついたのはビジネスロジックの最適化③
    ビジネスロジック③:主にサードパーティ製ライブラリPHPEXCELを呼び出して表を生成し、Googleを通じて、主にキャッシュによってこの問題を解決していることを発見した.PHPEXCELの著者自身はこの問題を考慮している.
     1:8M 
     ①
     2:47M
     ② 
     3:82M
     ③
     4:117M

    その後、メモリの使用状況
    ビジネスロジック①消費メモリ:39 M=47 M-8 M
    ビジネスロジック②消費メモリ:35 M=82 M-47 M
    ビジネスロジック③消費メモリ:35 M=117 M-82 M

    ビジネスロジックの最適化②


    ビジネスロジック②は単純な遍歴でデータ処理を行い,新しい配列に入れる.これでわかりますが、大きな配列によるメモリのオーバーヘッドも避けられません.しかし、私はお昼に問題を考えている間に少し発見しました.役に立たない変数に対して、私たちはすぐにログアウトしなければなりません.そうすれば、ビジネスロジック1の結果セットの変数が遍歴した後、役に立たないことを発見しました.直接ログアウトすることができます.このように最適化した後、メモリの使用状況は以下の通りです.
     1:8M 
     ①
     2:47M
     ② 
     3:31M
     ③
     4:67M

     
    その後、メモリの使用状況
    ビジネスロジック①消費メモリ:39 M=47 M-8 M
    ビジネスロジック②消費メモリ:-16 M=31 M-47 M
    ビジネスロジック③消費メモリ:36 M=67 M-31 M

    成果


    最后に67 Mメモリを使うだけで最后に最后に最后に最后に最后に最后に最后に、デフォルトの128 M制限でも私达はすべてとても良い支持~~を使って、最后に実は私达は3つの方案の结合体を使いました

    Game Over


    細かく排除して最適化して、実はこのような根掘り葉掘り聞くことをするのもとても達成感があることを発見して、しかも本当にゆっくりと底に深く入り込んで、phpの引用カウントと書く時の複製についてみんながすべて理解することができることを望みます

    参考資料


    phpExcelビッグデータ量の場合メモリオーバーフロー解決:http://www.cnblogs.com/myx/archive/2013/05/20/phpExcel-setCache.html 
    PHP拡張開発及びカーネル応用:http://www.cunmou.com/phpbook/ 
    原文アドレス:【PHPEXCEL】メモリオーバーフロー最適化プロセス
    ラベル:phpexcel php exhausted memoryメモリオーバーフロー

    スマート推奨

  • 【冗談を言って罪を犯す】ウェブサイトキャッシュ最適化
  • php execによるgitブランチの作成に失敗した
  • PHPバージョン1 password
  • を作成
  • phpexcel読み出しデータ
  • 【No.2 Ionic】Androidパッケージ
  • 転載先:https://blog.51cto.com/imguowei/1860652