PHPの実行が突然止まる、応答していないと思ったらXDebugが邪魔をしていた

シェアする

ヨメレバCSS

 最近nginx+php-fpmを使い始めました。初心者です。

 開発環境をvagrantで構築して1つのマシン上で完結させているのですが、どうにも上手く動いてくれなかったときに確認したことです。

スポンサーリンク
GoogleAdSence レクタングル(大)

実行してもPHPだけ動いてくれない

 症状は厄介なもので、HTMLファイルなどは普通に返してくれるのにPHPを実行させようとするとそこで応答が返ってこない。

 nginxのアクセスログには499エラーが記録されたりされなかったりしており、php-fpmのサービスをrestartするとそこで502エラーとなることからphp-fpmに処理は渡っていると推測できましたが、

すら応答がないのでちょっとよくわからない。

 つまり状況としては、php-fpmがフリーズしているように見えていました。

 /var/log/php-fpm/error.logを確認してみても特に何も出力されていない状況。

XDebugが邪魔をしていた

 結局のところ原因は、IntelliJで設定してたXDebugが邪魔をしていたようでした。

 起動していたIntelliJを全て終了させてみたところ、無事動作しました…

 これがブレークポイントを仕込んでいたのを忘れていたとかでしたら間抜けな話で済むのですが、全然関係ないところでDocumentRootを切り直し、新しく作ったphpinfoだけのスクリプトでもストップして、IDE側に応答が返ってきたわけでもないので、デバッグ用の仕組みがおかしな動作をしていたのではと思います。

 php-fpmとnginxの接続はUNIXソケットで行っていましたがデフォルトポートが9000だったので念のためポート周りを調べていたところ、vagrant側で

と、ホストOS側(192.168.1.1)の9000ポートに接続しにいっているものがありまして、ホストOS側でlsofしてみたところ、

とLISTENしているものと、そこからゲストOSにセッションを張っているものがいました。

 でもこちらでphp-fpmを動作させているわけないし、COMMANDはideaだし…と思ったところでIntelliJのXDebugがポート9000だったことを思い出し、IntelliJを終了させてみたところ無事動きました。

 ESTABLISHEDな接続がなぜか何本も出来ていたあたり、やはり何かしらおかしくなっていたのではと思います。

 Macは普段スリープさせてるし再起動したとしても開いていたアプリは復帰してくるので、ポート番号がたまたま9000で被っていなければ気がつかなかったかもしれません…

xdebugの設定

 このゲストOSの開発環境はコンソールからテストを実行する絡みもあって、xdebugの接続がすべてホストOSに行くように、

を設定していました。

 このため(おそらく開始直後に)IDEのほうに処理が流れていき、そこで何か上手くいかず、結果としてストップしてしまっていたのかと思います。

 同じような現象になってしまった場合はIDEを終了させてみたり、このあたりの設定を見直してみると良いかもしれません。