1

Web をクロールするときに情報をデータベースに保存する Web クローラーがあります。これを実行している間、アクションのログ ファイルと、発生したエラーを mysql データベースのログ フィールドに保存します (フィールドは 64kb から 100kb のいずれかになります。これは、(mysql CONCAT 関数を使用して) 連結することによって達成されます)。

これは問題なく動作しているように見えますが、CPU の使用率や mysql データベースへの影響が心配です。データベースへのログの保存を実装する前よりも、Web クローリングのパフォーマンスが低下していることに気付きました。

このログ ファイルを管理 Web ページから表示しましたが、現在の実装は読み込みが遅いことを除けば正常に動作しているようです。これを高速化するための推奨事項、または実装に関する推奨事項はありますか?

4

1 に答える 1

1

100kb の文字列を何度もメモリに読み込み、db を介してディスクに書き込みます。もちろん、減速を経験するつもりです!あなたがしていることのすべての部分は、タスクメモリ、ディスク、およびCPUに行きます(特に、メモリ使用量がシステムの最大値に達し、ディスクへのスワップを開始した場合)。サイト全体のパフォーマンスを低下させる可能性のある方法をいくつか挙げてみましょう。

  1. 100kb のレコードを保存する時間が増えると、単一のプロセスが接続を保持する時間が増加するため、SQL 接続が最大になり、バックアップされます。
  2. Web サーバー プロセスは、空きプロセス プールを使い果たし、解放するのにデータベース接続を待機する必要があるため、解放に時間がかかります。
  3. Web サーバー プロセスが膨張し始め、それぞれがより多くのメモリを消費します。おそらく、システムがスワッピングなしで処理できる量を超えます。これは、最大値を使用して合成されます。#2によるプロセスの数
  4. ... あなたの状況について本を書くことができます。
于 2012-07-18T14:18:28.040 に答える