【PHPEXCEL】メモリオーバーフロー最適化プロセス
2659 ワード
最近、当社のプロジェクトでexcelをエクスポートするときにメモリオーバーフローエラーが発生することがあります.テストにより、データ量が5000個以上ある場合にこの問題が発生することがわかりました(デフォルトphp.ini memoryは128 Mです).
メモリオーバーフローの問題を解決する方法は次のとおりです.メモリを追加し、phpを変更します.ini中memory_limitまたは@ini_set('memory_limit','256M') PHPEXCELライブラリはキャッシュの使用をサポートします具体的なキャッシュの使用はphpExcelの大きいデータ量の情況の下でメモリがあふれて解決します を見てくださいメモリが急激に増加した原因を特定する シナリオ1とシナリオ2は非常に簡単で乱暴ですが、根本に触れていません.なぜメモリが溢れているのか、技術者として土鍋を割って最後まで聞くべきです.
この文書では、メモリオーバーフローの問題をトラブルシューティングし、修復する方法について簡単に説明します.
①クエリー・データベース条件を満たすすべてのデータを取り出す
②条件を満たすデータを循環し、データ処理を行い、新しい配列に入れる
③PHPEXCELライブラリを使用してexcelテーブルを生成する
phpのmemory_を借りてget_USage関数メモリ使用状況の表示
上の図から私たちは以下の結論を出すことができる.
ビジネスロジック①消費メモリ:39 M=47 M-8 M
ビジネスロジック②消費メモリ:35 M=82 M-47 M
ビジネスロジック③消費メモリ:58 M=140 M-82 M
ビジネスロジックの記述から見ると、ビジネスロジック1は最適化されず、クエリーデータベースシステムは必然的にオーバーヘッドする.最初に思いついたのはビジネスロジックの最適化③
ビジネスロジック③:主にサードパーティ製ライブラリPHPEXCELを呼び出して表を生成し、Googleを通じて、主にキャッシュによってこの問題を解決していることを発見した.PHPEXCELの著者自身はこの問題を考慮している.
その後、メモリの使用状況
ビジネスロジック①消費メモリ:39 M=47 M-8 M
ビジネスロジック②消費メモリ:35 M=82 M-47 M
ビジネスロジック③消費メモリ:35 M=117 M-82 M
ビジネスロジック②は単純な遍歴でデータ処理を行い,新しい配列に入れる.これでわかりますが、大きな配列によるメモリのオーバーヘッドも避けられません.しかし、私はお昼に問題を考えている間に少し発見しました.役に立たない変数に対して、私たちはすぐにログアウトしなければなりません.そうすれば、ビジネスロジック1の結果セットの変数が遍歴した後、役に立たないことを発見しました.直接ログアウトすることができます.このように最適化した後、メモリの使用状況は以下の通りです.
その後、メモリの使用状況
ビジネスロジック①消費メモリ:39 M=47 M-8 M
ビジネスロジック②消費メモリ:-16 M=31 M-47 M
ビジネスロジック③消費メモリ:36 M=67 M-31 M
最后に67 Mメモリを使うだけで最后に最后に最后に最后に最后に最后に最后に、デフォルトの128 M制限でも私达はすべてとても良い支持~~を使って、最后に実は私达は3つの方案の结合体を使いました
細かく排除して最適化して、実はこのような根掘り葉掘り聞くことをするのもとても達成感があることを発見して、しかも本当にゆっくりと底に深く入り込んで、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
Allowed memory size of 134217728 bytes exhausted (tried to allocate 43 bytes)
メモリオーバーフローの問題を解決する方法は次のとおりです.
この文書では、メモリオーバーフローの問題をトラブルシューティングし、修復する方法について簡単に説明します.
操作手順
ビジネス概略ロジック
①クエリー・データベース条件を満たすすべてのデータを取り出す
②条件を満たすデータを循環し、データ処理を行い、新しい配列に入れる
③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メモリオーバーフロー