web-dev-qa-db-ja.com

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

Drupalインストールに問題があります。例:

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

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

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

私が持っているエラー:

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

19
Jayaram

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

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つの印刷ステートメントを追加し、ページを更新します。「$ moduleの読み込みを終了する」ステートメントに到達しなかったモジュールが問題のあるモジュールです...私の場合は開発されていました。

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

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

リファレンス: Debugging Drupal White Screen of Death(WSOD)

20
Joshua Kissoon

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

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

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

http://drupal.org/node/15804

11
Sandesh Yadav

死の空白の白い画面の理由は、エラー報告がオフになっているためです。エラーを確認するには、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' OR '512M'のようなメモリサイズを指定できます。

10
Ankit Agrawal

エラー:

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

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

PHP Yバイトを割り当てようとしたが、PHP memory_limit構成設定で設定されたXバイトにハード制限がある場合に発生します。

現在の制限は、アドミニストレーション"レポート"ステータスレポート"PHP(URL:/admin/reports/status/php)にアクセスするか、ini_get('memory_limit') in PHP(UIとCLIでは制限が異なることに注意してください)。

これを修正するには、リソース使用量を下げる必要があります。次に例を示します。

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

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

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

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

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

  • redis/memcachedキャッシュといくつかのPHPキャッシュ(例:OPCache/XCache))を有効にします。
  • 最後に上記が役に立たない場合-PHP configurationmemory_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にアクセスします。

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

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

6
kenorb

モジュールの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() を実行して、メモリを何が使用していたかを判断すると役立つ場合があります。

6

モジュールを使用して、このメモリ制限を制御できます。 PHP Runtime Configurator モジュールは、php.iniファイルを変更せずに構成するための多くのオプションを提供し、Apacheを再起動します。

次のパラメータを設定できます。

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