死の白い画面:致命的なエラー:Xバイトのメモリサイズを使い果たしました


21

Drupalのインストールに問題があります。たとえば:

  • モジュールを有効または無効にすると、空白のページにリダイレクトされます。
  • 新しいコンテンツタイプを作成して保存すると、空白のページにリダイレクトされ、
  • 新しいビューを追加して保存すると、空白のページにリダイレクトされ、
  • キャッシュをクリアしようとすると、空のページにリダイレクトされ、
  • または同様の場合。

基本的に、すべての確認ページで白い画面にリダイレクトされます。もう一度更新すると、ページが表示されます。PHPのメモリ値を増やしようとしましたが、役に立ちません。

これに対する他の解決策はありますか?

私が持っているエラー:

致命的エラー:1行目のsites / all / modules / views / plugins / views_plugin_localization_none.incで100663296バイトのメモリサイズを使い果たしました(8192バイトを割り当てようとしました)。


2
常にエラーログを確認してください。必要な情報がすべて揃っています。あなたの場合、メモリが不足しているように聞こえます。Drupal 7には32MB以上が必要で、多くのホストプロバイダーがデフォルトとして設定しています。
GoodSp33d

回答:


20

私はこれが遅れるかもしれないことを知っていますが、それは私を助けました。ほとんどの場合、モジュールによってWSODが発生しますが、プロセスでデータが失われた可能性があるため、モジュールを無効にしてテストすることはできませんでした。私がやったことmodule.incは、コアincludesディレクトリで、この関数を一時的に編集することでした

function module_invoke_all($hook) {
  $args = func_get_args();
  // Remove $hook from the arguments.
  unset($args[0]);
  $return = array();
  foreach (module_implements($hook) as $module) {

        print "Starting loading $module <br />";

        $function = $module . '_' . $hook;
        if (function_exists($function)) {
          $result = call_user_func_array($function, $args);
          if (isset($result) && is_array($result)) {
            $return = array_merge_recursive($return, $result);
          }
          elseif (isset($result)) {
            $return[] = $result;
          }
        }

        print "Finished loading $module <br />";

  }

  return $return;
}

そして、これらの2つのprintステートメントを上記のコードに追加し、ページを更新すると、「Finish loading $ module」ステートメントに到達しなかったモジュールが問題のあるモジュールになります。

モジュールを見つけたら、システムテーブルに移動してそのモジュールを探し、ステータスを0に設定し、ブートストラップを0に設定するか、クエリを実行します。

UPDATE system SET status = 0, bootstrap = 0 WHERE name = 'module_name' LIMIT 1

リファレンス:Drupal White Screen of Death(WSOD)のデバッグ


1
module_invoke_allにprintステートメントを追加すると、問題のモジュールをすばやく見つけることができました。次に、drushを使用して無効にしました。なんと命の恩人です!
ダンメイグス14年

@DanMeigsを歓迎します。今日、この方法を使用して、ブログcleverlogic.netを修正しました。WSODを修正しようとして何度も読んでいたので、これに関する記事を書く必要があるかもしれません。
ジョシュア

11

このコードをindex.phpファイルに貼り付けます。空白ページの代わりにエラーメッセージが表示されます。少なくとも問題の根本を知ることができます。phpタグの直後に貼り付けます。

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

それがあなたに道を示すことを願っています!

http://drupal.org/node/158043


1
それが機能しなかった、私はエラーを確認するために、昨日それを試してみましたが、それは何も印刷されません
ジャヤラム

3
エラーログを確認しましたか?LinuxでApacheを実行している場合は、ターミナルで次のコマンドを試してくださいtail /var/log/apache2/error.log。そのファイルの最新の10行が表示されます。
チャーリーシュリーザー

実際、エラーが表示されるようになりました。致命的なエラー:*** / sites / all / modules / views / plugins / views_plugin_localization_none.incで100663296バイトのメモリサイズを使い果たしました(8192バイトを割り当てようとしました)。 1行目
ジャヤラム

1
これを追加するのindex.phpは悪い考えです(一時的であっても、これが機能する場合、ほとんどの人は後で削除するのが面倒なので)、設定ファイルに直接貼り付けることをお勧めします。
ケノーブ

10

死の空白の白い画面の理由は、エラー報告がオフになっていることです。エラーを確認するには、setting.phpファイルに次の行を追加します。

error_reporting(E_ALL);
$conf['error_level'] = 2;
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

直面しているエラー(「XXXバイトの許容メモリサイズを使い果たした」)については、次のことを試すことができます。

  1. キャッシュを手動で切り捨てて、問題が解決するかどうかを確認します(それを行う前に、DBをバックアップすることをお勧めします)。

    Access phpMyAdmin and truncate all tables starting by cache_ from the database

  2. :あなたのsettings.phpファイルに次の行を追加して(上記のエラーの主な理由は、モジュールの部分的な負荷を引き起こし、それが問題を引き起こしているサーバによって排気メモリであるように)メモリ制限を増加させる ini_set('memory_limit', '-1');
    追加ini_set('memory_limit', '-1'); のオーバーライドデフォルトのPHPメモリ制限。
    メモリを制限する-1場合は、「256M」や「512M」などのメモリサイズを指定する代わりに制限します。


6

モジュールの1つがメモリ不足になっている可能性があります。

index.phpファイルに1行のコードを追加して、Drupalをデフォルト設定よりも多くのメモリで実行できるようにします。

ini_set('memory_limit','256M');

/drupal/index.phpファイルの?phpの後の行に上記のコードを追加します。すべてが正常に動作し始めたら、メモリの問題の原因を特定できます(モジュールである可能性が高い)。

モジュールを無効にしてから、ini_set( 'memory_limit'、 '256M');をコメント化します。すぐにロードされるかどうかを確認します。

ini_set( 'memory_limit'、 '256M')のままにすることは推奨されません。ソリューションとして用意されていますが、少なくともモジュールリストページにアクセスできるようにすることができます。

debug_backtrace()を実行して、メモリを使用しているものを判別すると役立つ場合があります。


これは役に立たなかった
ジャヤラム

また、モジュールリストページが表示されます。モジュールを有効/無効にしたときにのみ発生します。確認ページを表示するには、再度更新する必要があります。
ジャヤラム

2
ini_set()呼び出しをindex.phpに配置するのではなく、更新時に消去されるため、PHPでコーディングする必要がある場合は、サイト固有の正しい場所であるsettings.phpファイルに配置する必要がありますオーバーライドします。
アルフレッドアームストロング

これを追加するのindex.phpは悪い考えです(一時的であっても、これが機能する場合、ほとんどの人は後で削除するのが面倒なので)、設定ファイルに直接貼り付けることをお勧めします。
ケノーブ

6

エラー:

致命的なエラー:Xバイトのメモリサイズを使い果たしました(Yバイトを割り当てようとしました)

バイトXをMBに変換するには、1024 * 1024で除算するか、Wolframで確認します。

PHPがYバイトを割り当てようとしたときに発生しますが、PHP memory_limit構成設定で設定されたXバイトには厳しい制限があります。

現在の制限は、管理»レポート»ステータスレポート»PHP(URL:)にアクセスする/admin/reports/status/phpini_get('memory_limit')、PHPで印刷することで確認できます(UIとCLIでは制限が異なります)。

修正するには、次のようにリソース使用量を減らす必要があります。

  • 現在使用していない開発モジュールを無効にします(推奨)。

    これには、Devel、Devel Themer(有効な場合)が含まれます。

  • 使用していないモジュールを無効にし、

  • メモリリソースに影響を与える可能性のある特定のデバッグ変数を無効にします。例drush

    drush -y vset rules_debug 0
    drush -y vset rules_debug_log 0
  • XDebugなどの特定のPHP拡張機能を無効にします。

  • redis / memcachedキャッシュと一部のPHPキャッシュ(OPCache / XCacheなど)を有効にします。
  • 最後に、上記で解決しない場合-PHP構成の増加memory_limit

メモリの制限を増やすことに決めた場合、PHPコードを貼り付けて実際にコアをハッキングすることを勧める多くの人々index.phpが、PHPメモリを増やすために- それをしないでください!それは非常に悪い練習です。

代わりにsettings.php(またはsettings.local.php含まれている場合)編集し、最後に次のコードを貼り付けます。

ini_set('memory_limit', '512M');

または、これを行うより良い方法は、PHP構成ファイル(php.ini)を編集し、次の行を変更することです。

memory_limit = 512M  ; Maximum amount of memory a script may consume

がどこにあるかわからない場合は、次の方法php.iniで確認してください。

  • drush status コマンド
  • またはに移動し/admin/reports/status/phpます。

最も多くのメモリを使用しているページ/コンポーネントをさらに調査するには、次の可能性があります。

詳細については、次を確認してください。


1
+1は、PHP UIとCLIが異なる場合があることを強調しますmemory_limit。でdrushエラー/etc/php/7.0/cli/php.iniが発生したのにエラーが発生したため、報告された問題が発生しました/etc/php/7.0/cli/php.ini。したがって、drupal UIは正常に機能していました。ありがとう!
ミロマーチ

1

モジュールを使用して、このメモリ制限を制御できます。PHPランタイムコンフィギュレーターモジュールには、php.iniファイルを変更せずに構成してApacheを再起動するための多くのオプションが用意されています。

以下のパラメーターを構成できます。

  • ファイルのアップロード制限
  • メモリ制限
  • 最大実行時間制限
  • 最大入力変数制限

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.