web-dev-qa-db-fra.com

Écran blanc de la mort: erreur fatale: taille de mémoire autorisée de X octets épuisée

J'ai un problème avec mon Drupal, par exemple:

  • lorsque j'active ou désactive les modules, il me redirige vers une page vierge,
  • lorsque je crée un nouveau type de contenu et l'enregistre, me redirige vers une page vierge,
  • lorsque j'ajoute une nouvelle vue et la sauvegarde, elle me redirige vers une page vierge,
  • lorsque j'essaie de vider le cache, il me redirige vers une page vierge,
  • ou dans des cas similaires.

Fondamentalement, toutes les pages de confirmation me redirigent vers un écran blanc. Lorsque je le rafraîchis à nouveau, il me montre la page. J'ai essayé d'augmenter la valeur de la mémoire PHP mais cela n'aide pas.

Y a-t-il d'autres solutions pour cela?

L'erreur que je rencontre:

Erreur fatale: taille de mémoire autorisée de 100663296 octets épuisée (tentative d'allocation de 8192 octets) dans les sites/tous/modules/vues/plugins/vues_plugin_localization_none.inc sur la ligne 1

19
Jayaram

Je sais que cela peut être en retard, mais cela m'a aidé. La plupart du temps, un module provoque WSOD, je ne pouvais pas simplement désactiver les modules pour tester ce que c'était, car j'ai peut-être perdu des données dans le processus. Ce que j'ai fait, c'était de modifier temporairement cette fonction dans module.inc, dans le répertoire core 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;
}

Et j'ai ajouté ces 2 instructions d'impression dans le code ci-dessus, puis actualiser la page, le module qui n'a pas atteint l'instruction "Terminer le chargement de $ module" est celui qui a le problème ... il a été développé dans mon cas.

Après avoir trouvé le module, vous pouvez aller dans la table système et rechercher ce module, définir son état = 0 et bootstrap = 0 ou exécuter la requête:

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

Référence: Débogage Drupal White Screen of Death (WSOD)

20
Joshua Kissoon

Collez ce code dans votre index.php fichier. Il vous montrera le message d'erreur au lieu d'une page vierge. On peut au moins connaître la racine du problème. Collez-le juste après la balise php.

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

J'espère que cela vous montrera le chemin!.

http://drupal.org/node/15804

11
Sandesh Yadav

La raison de l'écran blanc vierge de la mort est le rapport d'erreur désactivé, pour vérifier l'erreur, ajoutez les lignes suivantes dans votre fichier setting.php:

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

Pour l'erreur que vous rencontrez ("Taille de mémoire autorisée de XXX octets épuisée"), vous pouvez essayer les choses suivantes:

  1. Tronquez le cache manuellement et vérifiez s'il résout le problème (il est probablement préférable de sauvegarder votre base de données avant de le faire):

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

  2. Augmentez la limite de mémoire (car la raison principale de l'erreur ci-dessus est la mémoire épuisée par le serveur qui a provoqué le chargement partiel des modules et qui cause le problème) en ajoutant la ligne suivante dans votre fichier settings.php: ini_set('memory_limit', '-1');
    L'ajout de ini_set('memory_limit', '-1'); remplace la limite de mémoire par défaut PHP.
    Si vous souhaitez restreindre la mémoire au lieu de -1, Vous pouvez fournir une taille de mémoire telle que '256M' OR '512M'.

10
Ankit Agrawal

L'erreur:

Erreur fatale: taille de mémoire autorisée de X octets épuisée (tentative d'allocation de Y octets)

Pour convertir les octets X en Mo, divisez par 1024 * 1024 ou vérifiez à Wolfram .

se produit lorsque PHP essaie d'allouer Y octets, mais il y a une limite stricte sur X octets définie par PHP memory_limit paramètres de configuration).

La limite actuelle peut être vérifiée en allant à Administration "Rapports" Rapport d'état "PHP (URL: /admin/reports/status/php) Ou en imprimant ini_get('memory_limit') in PHP (notez que la limite peut être différente pour l'interface utilisateur et la CLI).

Pour y remédier, vous devez réduire votre utilisation des ressources, par exemple:

  • désactiver tous les modules de développement que vous n'utilisez pas actuellement (recommandé),

    Cela comprend: Devel, Devel Themer (si activé).

  • désactiver tous les modules que vous n'utilisez pas,

  • désactiver certaines variables de débogage qui peuvent avoir un impact sur vos ressources mémoire, par exemple quelques exemples avec drush:

    drush -y vset rules_debug 0
    drush -y vset rules_debug_log 0
    
  • désactiver certaines extensions PHP, telles que XDebug,

  • activer les caches redis/memcached et certains caches PHP (par exemple OPCache/XCache),
  • enfin si ci-dessus ne vous aidera pas - augmentez memory_limit dans votre configuration PHP ).

Si vous décidez d'augmenter la limite de mémoire, beaucoup de gens ici conseillent de pirater votre cœur en collant le code PHP dans votre index.php Pour augmenter votre PHP mémoire - ne faites jamais ça ! C'est une très mauvaise pratique.

Modifiez plutôt votre settings.php (Ou settings.local.php Si vous l'avez inclus) et collez le code suivant à la fin:

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

ou une meilleure façon de procéder consiste à modifier votre PHP (php.ini) et à modifier la ligne suivante:

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

Si vous ne savez pas où est votre php.ini, Vérifiez par:

  • Commande drush status
  • ou en allant à /admin/reports/status/php.

Pour étudier plus en détail les pages/composants qui utilisent le plus de mémoire, vous disposez des possibilités suivantes:

Pour plus d'informations, consultez:

6
kenorb

Il se pourrait très bien que l'un de vos modules manque de mémoire.

Vous pouvez ajouter une ligne de code à votre fichier index.php pour permettre à Drupal de s'exécuter avec plus de mémoire que le paramètre par défaut:

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

Ajoutez le code ci-dessus sur la ligne après le? Php dans votre fichier /drupal/index.php. Si tout commence à bien fonctionner, vous pouvez identifier la cause du problème de mémoire (il s'agit très probablement d'un module).

Désactivez un module, puis commentez l'ini_set ('memory_limit', '256M'); et voyez s'il se charge maintenant.

Il n'est pas recommandé de quitter l'ini_set ('memory_limit', '256M'); en place comme solution, mais il peut au moins vous permettre d'accéder à la page de liste de vos modules.

Vous pouvez trouver utile de faire un debug_backtrace () pour déterminer ce qui utilisait la mémoire.

6
Johnathan Elmore

Vous pouvez utiliser un module pour contrôler cette limite de mémoire. PHP Runtime Configurator module fournit de nombreuses options pour configurer sans changer votre fichier php.ini et redémarrer Apache.

Vous pouvez configurer les paramètres suivants:

  • Limite de téléchargement de fichiers
  • Limite de mémoire
  • Délai d'exécution maximal
  • Limite de variable d'entrée maximale
1
Sahil Gupta