2

問題が発生している PHP アプリケーションがあり、一部のページの読み込みに非常に時間がかかります。

数時間後、問題は解決しましたが、修正方法がわかりません。

問題はヘッダーにあるようConnection: keep-aliveです。ヘッダーなどを「改ざん」できる「Tamper Data」という Firefox プラグインを使用しました。そのツールを使用してConnection: close、一部のページで接続ヘッダーを遅延に変更すると、停止しました。

Connection: closePHPでヘッダーが使用されていることを確認するにはどうすればよいですか?

header("Connection: close");PHPファイルの先頭に配置して、ページをリロードしてみました。送信Connection: keep-aliveしようとしているヘッダーではなく、ヘッダーを送信します。

自分がやろうとしていることをどのように達成できますか?

編集:このサブドメインでは、ほとんどのページで content-length ヘッダーがまったく送信されないことに気付きました。フォームの送信とそれに続くリダイレ​​クトの直後にのみ送信されます。

編集2:

これはページです: http://volunteer.essentialtransit.com/job/13/just-a-test-at-eta/

[Apply now] リンクをクリックしてランダムな txt に入力します。ファイルを添付する必要はありません。「求人」の詳細ページにリダイレクトされると、読み込みに非常に時間がかかることに注意してください。

4

2 に答える 2

2

あなたの問題は、接続状態とは何の関係もありません。Apache は、別のソースから発信された新しい要求ごとに新しい子スレッドを自動的に生成するため、接続に関連しているように見えるかもしれません。キープアライブを使用すると、PHP スクリプトから (アプリケーションから) 使用中の前のスレッドを再利用しようとします。実際にはもう少し複雑ですが、これが基本です。「接続: 閉じる」が送信されていることに注意してください。ただし、スクリプトが終了した (すべてのバッファーを送信した) 後にのみ接続を閉じることになっています。

次に、スクリプトをデバッグする方法を説明します。私がこれを行うのは、問題を解決せずにトラフィックが増えると、ホストが極端なリソース使用のためにあなたを追い出すからです.

そう:

  1. バックグラウンド スクリプトに問題があることを確認するには、追加set_time_limit(5)以上してください
  2. ローカル リソースへのリクエスト、ステージング サーバーでのみ機能するリクエストを確認します (これには WireShark を使用できます)。
  3. 外部リクエスト、cURL、file_get_contents()呼び出し、タイムアウトのあるものをチェック
  4. 長いスクリプトのベンチマークと最適化 (これには xdebug を試すことができます)
  5. すべての PHP 通知、警告、およびエラーをファイルに記録します。エラーは最大でゼロになるはずです
  6. 最後に、アプリケーション全体をトリプルチェックすることをお勧めします。1 つはデータ入力用、2 番目はデータ操作用、3 番目はモジュール相互接続用です。ただし、出力を返せない AJAX バックグラウンド スクリプトに注目する必要があります。

もちろん、当てはまらないものは飛ばしてください。

于 2012-06-16T04:00:09.503 に答える
1

そこで、何が問題なのかを特定し、この問題の回避策を見つけました。

フォームを処理したスクリプトは、入力を処理して別のページにリダイレクトしただけで、実際には何も出力しませんでした。サイトのほとんどのページでは、content-length ヘッダーが送信されないか、正しい値に設定されています。しかし、何らかの理由で、ページに投稿した後、処理スクリプトがブラウザーに何も出力せずにリダイレクトすると、コンテンツの長さが 0 に設定されていました。

コンテンツの長さを自分で設定しようとしましたが、違いがないように見えたので、うまくいきませんでした。

だから、私がしたことは、処理スクリプトに何らかの出力を持たせることだけでした。そのため、フォームが送信されると、処理スクリプトは、正しいページにつながるリダイレクト スクリプト (および念のために「クリックして続行」メッセージ) を含むページを出力します。したがって、これにより、フォームの送信と正しいページが表示されるまでに非常に短い遅延が追加されますが、コンテンツの長さが正しく設定され、問題は解決されます。

これは理想的なソリューションではありませんが、管理しやすく、スクリプトを機能させることができます。

于 2012-06-17T03:23:42.117 に答える