web-dev-qa-db-ja.com

ユーザーを削除するときにサイトがハングする原因は何ですか?

ユーザーを削除しようとすると、サイト全体がハングします。つまり、Drupalが応答しなくなります。何が原因ですか?

サイトには特別なユーザープロファイルモジュールがインストールされていません。

編集:
$op。 「削除」のケースは不審に見えます:

case 'delete':
    $sql = "DELETE FROM {mynewsletter_users} WHERE uid = %d";
    db_query($sql, $account->uid);
    break;

私には悪くないです。 hook_user-circleを呼び出さないでください。

編集:
問題はすべて自然に解消されました。何が起こったのかわからない。

5
EricSchaefer

私にとって、これはカスタムモジュールの_hook_user_の設定に誤りがある場合に発生しました。具体的には、_hook_user_のすべての実装をチェックして、_hook_user_の追加呼び出しにつながる関数がないことを確認します。

つまり、_hook_user_の下でfoo_do_magic_to_user()を呼び出すモジュール(または_hook_user_をヒットする他の関数)があり、foo_do_magic_to_user()user_save()、あなたの手には無限ループがあります。

更新

_hook_user_ループではないことが確実な場合は、モジュールに関連するハングアップがいくつもある可能性があります。これらには、応答しない外部サービスが含まれることがよくあります(たとえば、「さようなら」のメールを送信するが、sendmail(または同等のもの)が適切に設定されていない)。

あなたの靴で、私は試してみます:

1)すべての非コアモジュールを無効にし、問題が引き続き発生するかどうかを確認します。これがコアモジュールだけでまだ発生する場合は、より根本的な問題(PHPの正しいバージョン?)がある可能性があります。

2)#1でない場合は、contribモジュールを1つずつ再度有効にして、問題の原因となっているものを確認します。そのモジュールのhook_userを調べると、根本的な問題が何かについての良い手がかりが得られるはずです。ほとんどの場合、モジュールの1つが、応答しない他のサービスを呼び出しています。

4
anschauung

私が最初に行うことは、ローカルテスト用にライブサーバーのレプリカでローカルVM=を設定することです。理想的には、これはddで作成されたコピーになるか、同様。

何か実装されているかどうかを確認してくださいhook_user。 D5-D6サイトの場合は、サイトのルートから再帰的なgrep( ack を使用)を使用して、これらを見つけます。このコードを削除して、サイトが引き続きハングするかどうかを確認します。

MySQL Slow Query Log を使用して、ヒントがあるかどうかを確認します。 psとtopを使用して、Webサーバーで実際に何が起こっているかを確認します。

D5にロックがあるとは思わない(D6には lock_acquirelock.inc にある)

また、/ locked /になったらサーバーを回復する方法を説明できれば役に立ちます。

2