
私は PHP ウェブページをプログラミングしているのですが、コンピューターで奇妙な動作が見られるようになりました。ある時点で、Apache/PHP がブラウザーにウェブページを表示するのに時間がかかりすぎます (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
、 、またはresolver(3)
GNU libc のコードがコンパイルされるときです。残念ながら、 のマニュアル ページでは、resolv.conf
5 秒のタイムアウトがコンパイル時のデフォルトであると記載されているため、これについては推測するしかありません。