0

私は本当に奇妙な行動をしています。

主にモバイルトラフィックをログに記録する、ユーザー向けの追跡ソフトウェアをホストしています。現在、パスは次のとおりです。

1.クライアントは、自分の Web サイトに配置する php コード スニペットを取得します。

2.このコードは、(visiotr IP、useragent、host などの事前定義された投稿フィールドに基づいて) cURL 投稿をサーバーに送信します。

3.サーバーがデータをログに記録し、リスク レベルを決定します。

4.次に、ステータスについてクライアント サーバーに応答します。つまり、「true」または「false」をクライアント サーバーに送り返します。

5.クライアント サーバーはその応答を取得し、何をすべきかを決定します (異なる HTML コンテンツの読み込み、リダイレクト、訪問者のブロックなど)。

私が直面している問題は、何らかの理由で、クライアントのサーバーからサーバーへのすべての要求が記録され、ログ ファイルに保存されることです。しかし、彼らのサーバーはそれらの応答または何かを受信できません。

さまざまなクライアントのサーバーから、および各クライアント自身から、毎分大量のリクエストがあることに注意してください。

その理由は、CURL_RETURNTRANSFER が応答を取得していないことに関連している可能性がありますか? それとも、問題は cURL のオーバーロードですか?

本当にわからない。私のサーバーは非常に高速で、ソースの 10% しか使用していません。

ご意見ありがとうございます。

4

1 に答える 1

1

非常に問題のあるドメインに触れました-高負荷サーバー、問題は非常に多くの場所にある可能性があるため、実際に時間をかけて修正するか、少なくとも部分的に修正する必要があります.

まず第一に、実際に何が起こっているのかを理解する必要があります。次の簡略化されたスキームを確認してください。

  1. クライアントのphpコードは、サーバーへの接続を開こうとします。これを行うために、ネットワークを介してサーバーにデータを送信します
  2. サーバー(Apacheだと思います)は、リソースがある場合はそれを受け入れようとします-Apache構成の最大接続プロパティを確認してください
  3. サーバーが接続を受け入れることができる場合、新しいスレッドを作成しようとします (またはスレッド プールからスレッドを使用します)。
  4. スレッドが開始されると、php スクリプトが実行されます
  5. あなたのphpスクリプトはいくつかの作業を行い、dbに接続し、ネットワーク経由で応答を返します
  6. クライアントは p5 からの応答を待つか、タイムアウトのために接続を閉じます

したがって、各ポイントでボトルネックが発生する可能性があります。

  1. ネットワーク帯域幅
  2. 開いている接続の最大数
  3. スレッドプールサイズ
  4. スクリプト実行時間
  5. 最大データベース接続、テーブル ロック、io 待機時間
  6. クライアントのタイムアウト

また、問題が発生し、最終的に空の curl 応答につながる可能性のある場所の完全なリストではありません。

最初から、両方の PHP コード (クライアントとサーバー) にログを追加し、すべての curl_error 問題を何らかのテキスト ファイルに保存することをお勧めします。少なくとも、どのような問題が頻繁に発生するかがわかります。

于 2013-10-10T23:18:16.837 に答える