O'limning oq ekrani: Fatal error: X baytlarning ruxsat etilgan xotira hajmi tugadi

Mening Drupal o'rnatishim bilan bog'liq muammo bor, masalan:

  • Moduli yoqilganda yoki o'chirilganda, meni bo'sh sahifaga yo'naltiradi,
  • Yangi kontent turini yaratganimda va uni yozib olsam, meni bo'shga yo'naltiradi sahifa
  • Yangi versiya qo'shsam va uni saqlaganimda, meni bo'sh sahifaga yo'naltiradi,
  • Keshni tozalashga harakat qilsam, meni bo'sh sahifaga qaytaradi,
  • yoki o'xshash holatlarda.

Asosan, tasdiqlash sahifalari meni oq ekranga yo'naltiradi. Qayta yangilaganimda menga sahifa ko'rsatiladi. PHP xotira qiymatini oshirishga harakat qildim, lekin bu yordam bermaydi.

Buning uchun boshqa echimlar bormi?

Xato:

Fatal error: 1-satrda saytlarda/all/modules/views/plugins/views_plugin_localization_none.inc saytida 100663296 bayt bo'sh bo'lgan (8192 baytni ajratishga harakat qiladigan) ruxsat etilgan xotira hajmi

20
Har doim xato jurnallarini tekshirib turing, zarur bo'lgan barcha ma'lumotlarga ega bo'ladi. Sizning holatlaringizga o'xshab, siz xotiradan yugurasiz. Drupal 7 32MB dan ko'pini talab qiladi.
qo'shib qo'ydi muallif Thunderstrike, manba

6 javoblar

Bilaman, bu kech bo'lishi mumkin, lekin bu menga yordam berdi. Ko'pincha modul WSODga sabab bo'ladi, men modullarni tekshirish uchun modullarni o'chira olmasdim, chunki bu jarayonda ma'lumotlar yo'qolgan bo'lishi mumkin. Ushbu funktsiyani module.inc da vaqtinchalik tahrir qilish uchun nima qilgan bo'lsam, yadroda o'z ichiga oladi katalogi

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 
"; $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
"; } return $return; }

Va men ushbu 2 bosma so'zni yuqoridagi kodni qo'shib qo'ydim, so'ngra sahifani yangilang, "Finish loading $ modul" iborasiga kelmaydigan modul bu muammo bilan tuzilgan ... bu mening taraqqiyotim edi.

Modulni topgach, siz tizim stoliga kirishingiz va ushbu modulni topishingiz mumkin, uning holatini = 0 va bootstrap = 0 deb belgilashingiz yoki so'rovni bajarishingiz mumkin:

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

Reference: Debugging Drupal White Screen of Death (WSOD)

19
qo'shib qo'ydi
Module_invoke_all ga bosib so'zlarni qo'shish meni xafa qiladigan modulni tezda topishga imkon berdi. Keyin men uni o'chirish uchun drushdan foydalandim. Qanday hayot baxsh etadi!
qo'shib qo'ydi muallif MarkHu, manba
Sizga @DanMeigs yoqadi. Men bugun bu usulni faqat blogimni tuzatish uchun foydalanganman. cleverlogic.net . Ehtimol, men bu haqda maqola yozishim kerak, albatta, men WSOD-ni o'rnatishga harakat qiladigan juda ko'p narsani o'qiganman
qo'shib qo'ydi muallif DForck42, manba

O'limdan bo'shashtirilgan oq ekranning sababi xato haqidagi hisobotni o'chirib qo'yish, xatolikni setting.php faylida quyidagi satrlarni tekshirish uchun tekshirish:

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

Siz ko'rayotgan xato uchun ("XXX bayt bo'shagan xotira hajmi"), siz quyidagilarni sinab ko'rishingiz mumkin:

  1. Truncate the cache manually and check if it fixes the problem ( It is probably be a good to backup your DB before doing that):

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

  2. Increase the memory limit (as the main reason of the above error is the memory exhausted by the server which caused the partial loading of the modules and that is causing the problem) by adding the following line in your settings.php file: ini_set('memory_limit', '-1');
    Adding ini_set('memory_limit', '-1'); overrides the default PHP memory limit.
    If you want to restrict the memory than instead of -1 you can provide memory size like '256M' OR '512M'.

10
qo'shib qo'ydi

Ushbu kodni index.php faylingizga joylashtiring. Bo'sh sahifalar o'rniga xato xabari ko'rsatiladi. Eng kam muammolarning ildizi ma'lum bo'lishi mumkin. PHP tagidan keyin uni to'g'ri joylashtiring.

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

Umid qilamanki, sizga yo'l ko'rsatadi !.

http://drupal.org/node/158043

9
qo'shib qo'ydi
Buni index.php ga qo'shib qo'yish - bu yomon fikrdir (hatto agar bu ishni bajarish uchun ko'pincha odamlar uni keyinchalik o'chirish uchun dangasa bo'lishi kerak bo'lsa), uni to'g'ri sozlamalar faylingizga joylashtirish yaxshidir.
qo'shib qo'ydi muallif samjudson, manba
Bu ish bermadi, men xatoni ko'rish uchun kechagi ishni sinab ko'rdim, lekin hech narsa chop qilmadi
qo'shib qo'ydi muallif Doug Luxem, manba
Aslida, menga xatolarni ko'rsata boshladim. Fatal xato: 100663296 baytda ruxsat berilgan xotira hajmi (foydalanuvchi tomonidan 8192 byte) ***/saytlar/all/modules/views/plugins/views_plugin_localizatio & zwnj; 1-qatorda n_none.inc
qo'shib qo'ydi muallif Doug Luxem, manba
Xato jurnalini tekshirdingizmi? Agar Apache-ni Linuxda ishlayotgan bo'lsangiz, ushbu buyruqni terminalda ko'ring: tail /var/log/apache2/error.log . Bu sizga ushbu faylning so'nggi 10 satrini ko'rsatib beradi.
qo'shib qo'ydi muallif 0x60, manba

Sizning modulingizdan biri xotiradan chiqib ketishi juda yaxshi bo'lishi mumkin.

Drupal'ning standart sozlamadan ko'ra ko'proq xotira bilan ishlashiga ruxsat berish uchun index.php faylingizga bir qator kod qo'shishingiz mumkin:

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

/Drupal/index.php faylida php-dan keyin yuqoridagi kodni qatorga qo'shing. Agar har bir narsa yaxshi ishlay boshlasa, unda siz xotira muammosiga nima sabab bo'lganini aniqlab olishingiz mumkin (bu juda modul bo'lishi mumkin).

Modulni o'chiring va ini_set ('memory_limit', '256M') ni sharhlang; va u hozirgi kunda yuk ko'tarilganligini tekshiring.

Ini_set ("memory_limit", "256M") dan chiqish tavsiya etilmaydi; bu erdagi yechim sifatida emas, balki sizning hech bo'lmaganda modul ro'yxati sahifasiga kirishga ruxsat berishi mumkin.

debug_backtrace() nima qilishini aniqlash uchun sizga yordam berishi mumkin. xotiradan foydalaning.

6
qo'shib qo'ydi
Buni index.php ga qo'shib qo'yish - bu yomon fikrdir (hatto agar bu ishni bajarish uchun ko'pincha odamlar uni keyinchalik o'chirish uchun dangasa bo'lishi kerak bo'lsa), uni to'g'ri sozlamalar faylingizga joylashtirish yaxshidir.
qo'shib qo'ydi muallif samjudson, manba
Ini_set() dagi ini_set() chaqiruvlarini index.php-da joylashtirish o'rniga, agar ular PHP-da kodlashni talab qiladigan bo'lsa, siz ularni settings.php faylida joylashtirishingiz kerak, bu saytga mos keladigan joy bekor qiladi.
qo'shib qo'ydi muallif DaL, manba
Bu yordam bermadi
qo'shib qo'ydi muallif Doug Luxem, manba
Bundan tashqari, men modullar ro'yxatini ko'rishingiz mumkin, faqatgina modullarni faollashtiradigan/o'chirib yuborganimda sodir bo'ladi, tasdiqlov varag'ini ko'rish uchun uni qayta yangilashim kerak.
qo'shib qo'ydi muallif Doug Luxem, manba

Xato:

Muhim xato: X baytlarning ruxsat etilgan xotira hajmi tugadi (Y baytlarini ajratish uchun harakat qildi)

Bayt Xni MB ga aylantirish uchun 1024 * 1024ga bo'linishi yoki Kuzatuvchilar » .

PHP Y baytlarini ajratishga harakat qilganda sodir bo'ladi, lekin PHP memory_limit sozlamalari tomonidan o'rnatiladigan X byteida qattiq chegaralar mavjud.

Amaliy cheklov Ma'muriyat »Hisobotlar» maqomidan hisobot »PHP (URL: /admin/reports/status/php ) yoki ini_get ("memory_limit") (iltimos, foydalanuvchi interfeysi va CLI uchun chegaralangan bo'lishi kerak).

Buni tuzatish uchun manba foydalanishni kamaytirishingiz kerak, masalan:

  • disable any development modules which you're not using currently (recommended),

    This includes: Devel, Devel Themer (if enabled).

  • disable any modules which you're not using,

  • disable certain debug variables which can impact on your memory resources, e.g. few examples with drush:

    drush -y vset rules_debug 0
    drush -y vset rules_debug_log 0
    
  • disable certain PHP extensions, such as XDebug,

  • enable redis/memcached caches and some PHP caches (e.g. OPCache/XCache),
  • finally if above won't help - increase memory_limit in your PHP configuration.

Agar siz xotira miqdori ortib borayotganiga qaror qilsangiz, PHP xotirangizni PHP xotirangizni oshirish uchun PHP kodini index.php -ga joylashtirish orqali yadroni aslida kesib o'tishni maslahat beradigan ko'plab odamlar bu haqda maslahat beradi - hech qachon buni qilmasin! Bu juda yomon amaliyot.

Buning o'rniga settings.php (yoki agar kiritilgan bo'lsa, settings.local.php ) ni tahrir qiling va u erda quyidagi kodni joylashtiring:

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

yoki

PHP konfiguratsiya faylini ( php.ini ) tahrirlash va quyidagi qatorni o'zgartirish uchun:

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

Agar siz php.ini qaerda ekanligiga ishonchingiz komil bo'lmasa, tekshiring:

  • drush status command
  • or by going at /admin/reports/status/php.

Qaysi sahifalar/tarkibiy qismlarning eng ko'p xotiradan foydalanayotganligini o'rganish uchun siz quyidagi imkoniyatlarga egasiz:

Qo'shimcha ma'lumot olish uchun quyidagilarni tekshiring:

6
qo'shib qo'ydi
PHP UI va CLI turli memory_limit bo'lishi mumkinligini ta'kidlash uchun +1. /etc/php/7.0/cli/php.ini da xatolik yuz berdi, lekin /etc/ da emas, balki faqat drush php/7.0/cli/php.ini , shuning uchun Drupal UI yaxshi ishladi. Rahmat!
qo'shib qo'ydi muallif JB., manba

Ushbu xotira limitini boshqarish uchun moduldan foydalanishingiz mumkin. PHP Runtime Configurator moduli php.ini faylini o'zgartirmasdan va Apacheni qayta boshlamasdan jihozlash uchun ko'plab imkoniyatlarni taqdim etadi.

You can configure following parameters:

  • Fayl yuklash cheklovi
  • Xotira limiti
  • Maksimal ijro muddati limiti
  • Maksimal Kirish Variable Limit
1
qo'shib qo'ydi