PHP Webページを作成していますが、私のコンピュータで奇妙な動作が見え始めました。ある時点で、apache / phpがブラウザにWebページを表示するのに長い時間(8秒)かかりました。最初はそれが私だと思いました。私はバグがあり、スクリプトを完了するのにかかる時間を追跡するデバッグ機能を作成しましたが、ページを何度も再ロードし始めたとき(F5キーを押す)、私のスクリプトではなく他のプロセスがあることがわかりました。一部のプロセスでは、Apacheを停止する(またはphpまたはmysql)を押してからF5を数回押すと、スクリプトがすばやく完了したり、時間がかかることがあります。
[time_start] => Array
(
[0] => 1446841239.1471
[1] => 0.0581
[2] => 0.0589
[3] => 0.0564
[4] => 8.0531
[5] => 0.0574
[6] => 0.0621
[7] => 8.0582
[8] => 0.0548
[9] => 8.0457
[10] => 0.0755
[11] => 8.0555
[12] => 0.0512
[13] => 8.0447
[14] => 0.062
[15] => 8.0905
[16] => 0.0602
[17] => 8.0556
[18] => 0.0582
[19] => 8.0492
[20] => 0.0551
)
各ステップはF5キーを押した後に実行されるのと同じスクリプトであり、常に同じ時間がかかりますが、時には完了するのに8秒かかりますが、停止すると常に約8秒かかります。
だから質問は私のスクリプトをブロックするプロセスを見つける方法についてのアイデアはありますか?
Ps.- パーソナルコンピュータなので、フォアグラウンドで実行されているタスクがたくさんありますが、ブラウザのみを使用し、他のアプリを実行しなくても動作が停止するため、バックグラウンドで実行中のタスクが必要です。どうやって見つけることができますか?
ベストアンサー1
一貫した8秒は、潜在的に長時間実行されている一部のプロセスにタイムアウトが設定されていることを意味します。 PHPコードが何をしているのかわからない場合は、DNS時間がわかります。 PHPが一部のネットワークI / Oまたは他のタスクを実行している場合は、DNSルックアップがトリガーされることがあります。時々 DNS クエリがタイムアウトする現象が発生し、PHP はその状況で行った作業を続けます。
DNSタイムアウトが設定されていることがわかる唯一の場所は、または/etc/resolv.conf
GNU resolver(3)
libcでコードをコンパイルするときです。残念ながら、マニュアルページでは、resolv.conf
5秒のタイムアウトがコンパイル時のデフォルト値であると主張するので、推測にすぎません。