インソースマーケティングデザイン
2016.10.07 システム
[PHP]遅い原因はXdebugだった!?
こんにちは。エンジニアの高田です。
どうでもいい話ですが、先日ユ○クロのサイズが表記されたシールを
ズボンに貼ったまま歩いているサラリーマンがいました。
勇気が出せず「付いてますよ!」のひと言が言えませんでした。。。
さて今回は、先日出来上がったプログラムの性能テストをしている際、目からうろこだった事象をご紹介します。
どのようなプログラムかというと、Excelのデータをアップロードして、データを登録したり、出力したりするアプリケーションを作成しました。
開発の最終段階で性能テストを行いました。
登録するデータを「1万件」「2万件」「5万件」「10万件」でそれぞれ処理時間はどれくらいかかるのか。
エラーなどにならず、処理を終えることができるのか。などをテストしました。
今回のプログラムのテストで「1万件」のExcelデータを登録するのに約「5分」かかっていました。
プログラムの環境は「PHP5.4」「Apache2.4」。
「PHPExcel」というPHPにてExcelをあれこれ処理できるライブラリを使用しています。
ログを仕込むと、データをループで回しながら登録するところはさほど時間はかからないのに、「PHPExcel」でExcelファイルを開いて読み込む部分に大半の時間がかかっています…。
「PHPExcel」は処理速度が遅いと有名なライブラリです…。
それでもなぜ使うのか?!便利だからです。
これまでも「PHPExcel」には色々苦労してきました。
大量データを処理しているとメモリを食い尽くしてサーバーを止めてしまうとか…。
そのための対策などはまたいつか紹介できればと思っています。
その後テストの一環で、本番環境に近い環境でテストを行いました。
同じ私のPC内ですが、新たに「Apace」「PHP」の環境を準備しました。
すると同じプログラムのテストで「1万件」のExcelデータを登録するのに約「2分」で終わりました。「5分」が「2分」!半分以下の処理時間になっています!!
そのため環境の違いを調べました。「Apache」や「PHP」の設定ファイルの差分をとると、「php.ini」に「Xdebug」の設定があるかないかの違いがありました。
「Xdebug」とはPHPにおいてデバッグするためのモジュールです。
これがない時代は、ログを仕込んだり、echoしまくったり、なかなかの労力が必要でした。
「Xdebug」を使用してデバッグする方法は以前のブログに書いてあるので、参照してみてください。
参照:[PHP]Eclipse+Xdebugによるデバッグ
開発環境の「PHP」においてもphp.iniの「Xdebug」の設定を削除してみると、同等の処理速度を得ることができました。
その後調べてみると同じような経験をしている方もいらっしゃいました。
参照:FLAMA技術Blog「PHPExcelが遅い場合」
遅い原因は「Xdebug」だったんです…。
性能テストや運用環境には「Xdebug」は設定してはいけませんね。
気をつけましょう。
ではまた。