1

I have a Drupal 6 site that is frequently (about once a day) going down. The hosting provider is reporting that something in our site code is occupying all Apache threads but keeping them idle, making the server run out of threads to respond to new requests. A simple restart of Apache frees the threads and fixes the issue, though it reoccurs within a few hours or a day.

I have no idea how to troubleshoot this issue and have never come across PHP code doing this. Is there some kind of Apache settings change I can make to capture more information about what might be keeping a thread occupied but idle? What typical PHP routines can cause this behavior? I looked for code that connects to external resources, but didn't see any issues there.

Any hints for what to look at, capture more information, or PHP code that can cause this would be most useful.

4

1 に答える 1

0

Drupal6 では、poormanscronモジュールを実行することもあれば、従来の cron (crontab wget などから) を実行することもできます。次に、重いcron操作を1回実行して、データベースを重いものにする可能性があります. 次に、データベースの応答時間が非常に遅くなると、すべての http 要求が非常に遅くなります (たとえば、セッションがデータベース内にあり、drupal ページに数百のクエリが必要な場合)。すべてのリクエストの速度が低下すると、使用可能なすべての php プロセスが「占有状態」になる可能性があります。

Apacheを再起動すると、現在のすべてのプロセスが停止します。drush 経由ではなく wget 経由で cron を実行する場合は、cron タスクを確認するとよいでしょう (drush 経由で cron を実行すると、php-cli 経由で実行され、apache を再起動しても cron は強制終了されません)。elysia cronなどのモジュールを試して、cron タスクの詳細を取得し、長いタスクを分離することができます (タスクの期間に関するレポートがあります)。

この効果 (1 つのリクエストがデータベースに悪影響を及ぼし、すべてのリクエストが遅くなり、利用可能なプロセスがなくなる) は、インストールされているモジュールのいずれかからの 1 つの不適切なコードによっても発生する可能性があります。これは検出するのが難しいでしょう。

したがって、遅いクエリが MySQL で追跡されるようにし (my.cnf otinons を参照)、これらのリクエストをmysqslaのような通行料で分析します。問題は、1 つのクエリが大きすぎて、すべてのクエリが遅くなることがあるということです。クラッシュの使用時間を調べて、最初のものを検出します。インデックスを使用しないクエリを追跡するには、MySQL オプションも使用します。

drupal を使用した php 操作ですべての apache プロセスを停止させるもう 1 つの方法は、ロックの問題です。Drupal はMySQLで独自のロック実装を使用しています。これらのファイルにウォッチドッグ(drupal の内部デバッグ メッセージ) 呼び出しを追加して、ロックの問題を検出することもできます。

次に、drupal によって作成された外部 http 要求の呼び出しを行うこともできます。facebook、google、いくつかの小さな URL ツール、または drupal.org モジュールの更新などの外部 Web サイトを呼び出すと、常にすべてのモジュールを検索しようとします。離れた Web サイトがダウンしているか、トラフィックをフィルタリングしている場合、問題が発生します (ただし、Apache の再起動は役に立たないため、そうではない可能性があります)。

于 2013-02-19T20:38:12.083 に答える