सफेद स्क्रीन ऑफ डेथ: घातक त्रुटि: एक्स बाइट्स की अनुमत मेमोरी का आकार समाप्त हो गया


21

मेरे पास अपने Drupal स्थापना के साथ एक समस्या है, उदाहरण के लिए:

  • जब मैं मॉड्यूल को सक्षम या अक्षम करता हूं, तो यह मुझे एक रिक्त पृष्ठ पर पुनर्निर्देशित करता है,
  • जब मैं एक नई सामग्री प्रकार बनाता हूं और इसे सहेजता हूं, तो मुझे एक रिक्त पृष्ठ पर भेज देता है,
  • जब मैं एक नया दृश्य जोड़ता हूं और इसे सहेजता हूं, तो यह मुझे एक रिक्त पृष्ठ पर भेज देता है,
  • जब मैं कैश को साफ़ करने की कोशिश करता हूं, तो यह मुझे एक खाली पृष्ठ पर वापस भेज देता है,
  • या इसी तरह के मामलों में।

मूल रूप से सभी पुष्टि पृष्ठ मुझे एक सफेद स्क्रीन पर पुनर्निर्देशित करते हैं। जब मैं इसे फिर से ताज़ा करता हूं, तो यह मुझे पेज दिखाता है। मैंने PHP मेमोरी वैल्यू बढ़ाने की कोशिश की लेकिन यह मदद नहीं करता है।

क्या इसके लिए कोई अन्य उपाय हैं?

जो त्रुटि मुझे हो रही है:

घातक त्रुटि: 100663296 बाइट्स की स्वीकृत मेमोरी साइज (8192 बाइट्स आवंटित करने की कोशिश की गई) / सभी / मॉड्यूल / विचार / प्लगइन्स / विचार_प्लगिन_लोकेशन_नोन.एनसी 1 लाइन पर


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 प्रिंट स्टेटमेंट्स को जोड़ा, फिर पेज को रिफ्रेश किया, जो मॉड्यूल "फिनिश लोडिंग $ मॉड्यूल" तक नहीं पहुंचा था, वह समस्या के साथ एक है ... यह मेरे मामले में ठीक था।

मॉड्यूल खोजने के बाद, आप सिस्टम तालिका में जा सकते हैं और उस मॉड्यूल को देख सकते हैं, यह स्थिति = 0 और बूटस्ट्रैप = ​​0 सेट कर सकते हैं या क्वेरी चला सकते हैं:

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

संदर्भ: डेबगिंग ड्रुपल व्हाइट स्क्रीन ऑफ़ डेथ (डब्लूएसओडी)


1
Mod_invoke_all में प्रिंट स्टेटमेंट जोड़कर मुझे जल्दी से आक्रामक मॉड्यूल खोजने की अनुमति मिली। तब मैंने इसे निष्क्रिय करने के लिए ड्रश का इस्तेमाल किया। क्या जीवन-रक्षक!
दान मीग्स

आपका @DanMeigs में स्वागत है। मैंने इस विधि का उपयोग केवल आज ही किया है ताकि मैं अपने ब्लॉग को समझ सकूं । शायद मैं, इस पर एक लेख लिखना चाहिए cuz मुझे यकीन है कि WSOD तय करने की कोशिश कर एक बहुत whiles पढ़ा करते हैं
यहोशू Kissoon

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
यह काम नहीं किया, मैंने कोशिश की कि कल त्रुटियों को देखने के लिए, लेकिन यह कुछ भी प्रिंट नहीं करता है
Jayaram

3
क्या आपने अपनी त्रुटि लॉग की जाँच की है? यदि आप लिनक्स पर अपाचे चला रहे हैं, तो टर्मिनल में इस कमांड का प्रयास करें tail /var/log/apache2/error.log:। यह आपको उस फ़ाइल की 10 सबसे हाल की लाइनें दिखाएगा।
चार्ली श्लिसेर

दरअसल, इसने मुझे त्रुटियाँ दिखानी शुरू कर दीं .. जो त्रुटि मुझे मिली वह है फेटल एरर: 100663296 बाइट्स की स्वीकृत मेमोरी साइज (8192 बाइट्स आवंटित करने की कोशिश की गई) *** / साइट्स / सभी / मॉड्यूल्स / व्यूज / प्लगइन्स / व्यू.plugin_localization_none.inc में ऑन लाइन 1
जयराम

1
इसे जोड़ना index.phpएक बुरा विचार है (यहां तक ​​कि अस्थायी भी, क्योंकि ज्यादातर लोग इसे बाद में हटाने के लिए आलसी होते हैं यदि यह काम करता है), इसे सीधे अपनी सेटिंग्स फ़ाइल में पेस्ट करना बेहतर है।
kenorb

10

मौत की रिक्त सफ़ेद स्क्रीन का कारण त्रुटि रिपोर्टिंग बंद हो गई है, त्रुटि की जाँच करने के लिए अपनी सेटिंग में निम्न पंक्तियाँ जोड़ें। फाइल फ़ाइल:

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

आप जो त्रुटि का सामना कर रहे हैं ("XXX बाइट्स की स्वीकृत मेमोरी आकार"), आप निम्न चीज़ों को आज़मा सकते हैं:

  1. कैश को मैन्युअल रूप से काटें और जांचें कि क्या यह समस्या को ठीक करता है (ऐसा करने से पहले अपने डीबी का बैकअप लेना संभव है):

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

  2. मेमोरी सीमा बढ़ाएं (उपरोक्त त्रुटि का मुख्य कारण सर्वर द्वारा समाप्त की गई मेमोरी है जो मॉड्यूल की आंशिक लोडिंग का कारण बनती है और जो समस्या पैदा कर रही है) अपनी सेटिंग्स में निम्न पंक्ति जोड़कर। पीडीएफ फाइल: ओवरराइड्स ini_set('memory_limit', '-1');
    जोड़ना ini_set('memory_limit', '-1');डिफ़ॉल्ट PHP मेमोरी सीमा।
    यदि आप मेमोरी को प्रतिबंधित करना चाहते हैं तो इसके बजाय -1आप '256M' या '512M' जैसे मेमोरी साइज प्रदान कर सकते हैं।


6

यह बहुत अच्छी तरह से हो सकता है कि आपका कोई मॉड्यूल मेमोरी से बाहर चल रहा हो।

आप Drupal को डिफ़ॉल्ट सेटिंग से अधिक मेमोरी के साथ चलाने की अनुमति देने के लिए अपनी index.php फ़ाइल में कोड की एक पंक्ति जोड़ सकते हैं:

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

अपनी /drupal/index.php फ़ाइल में php के बाद लाइन पर उपरोक्त कोड जोड़ें। यदि सब कुछ ठीक काम करना शुरू कर देता है, तो आप पहचान सकते हैं कि मेमोरी समस्या क्या है (अत्यधिक संभावना है कि यह एक मॉड्यूल है)।

एक मॉड्यूल को अक्षम करें, और फिर ini_set ('memory_limit', '256M') पर टिप्पणी करें; और देखें कि क्या यह अब लोड होता है।

यह ini_set ('memory_limit', '256M') छोड़ने की सिफारिश नहीं की जाती है; एक समाधान के रूप में, लेकिन यह कम से कम आपको अपने मॉड्यूल सूची पृष्ठ पर पहुंचने की अनुमति दे सकता है।

मेमोरी का उपयोग करने के लिए आपको डिबग_बैकट्रेस () करने के लिए उपयोगी हो सकता है ।


इसने मदद नहीं की
Jayaram

इसके अलावा, मैं मॉड्यूल सूची पृष्ठ देख सकता हूं, यह केवल तब होता है जब मैं मॉड्यूल को सक्षम / अक्षम करता हूं, मुझे पुष्टि पृष्ठ देखने के लिए इसे फिर से ताज़ा करना होगा।
जयराम

2
Ini_set () कॉल को index.php में डालने के बजाय, जहां वे एक अपडेट पर मिटा दिए जाएंगे, अगर आपको उन्हें PHP में कोड करना है तो आपको उन्हें अपनी सेटिंग्स में डालना चाहिए। पीपीपी फ़ाइल, जो साइट-विशिष्ट के लिए सही जगह है ओवरराइड।
अल्फ्रेड आर्मस्ट्रांग

इसे जोड़ना index.phpएक बुरा विचार है (यहां तक ​​कि अस्थायी भी, क्योंकि ज्यादातर लोग इसे बाद में हटाने के लिए आलसी होते हैं यदि यह काम करता है), इसे सीधे अपनी सेटिंग्स फ़ाइल में पेस्ट करना बेहतर है।
kenorb

6

त्रुटि:

घातक त्रुटि: एक्स बाइट्स की अनुमत मेमोरी का आकार समाप्त हो गया (वाई बाइट्स आवंटित करने की कोशिश की गई)

बाइट्स एक्स को एमबी में बदलने के लिए 1024 * 1024 से विभाजित करें या वुल्फराम की जांच करें ।

जब PHP वाई बाइट्स को आवंटित करने का प्रयास करता है, लेकिन PHP memory_limitकॉन्फ़िगरेशन सेटिंग्स द्वारा निर्धारित एक्स बाइट्स पर कठोर सीमा होती है ।

वर्तमान सीमा को प्रशासन »रिपोर्ट» स्थिति रिपोर्ट »PHP (URL :) पर जाकर /admin/reports/status/phpया ini_get('memory_limit')PHP में मुद्रण करके नोट किया जा सकता है (ध्यान दें कि सीमा यूआई और सीएलआई के लिए भिन्न हो)।

इसे ठीक करने के लिए, आपको अपने संसाधन उपयोग को कम करने की आवश्यकता है, उदाहरण के लिए:

  • किसी भी विकास मॉड्यूल को अक्षम करें जो आप वर्तमान में उपयोग नहीं कर रहे हैं (अनुशंसित),

    इसमें शामिल हैं: देवल, देवल थीमर (यदि सक्षम है)।

  • किसी भी मॉड्यूल को अक्षम करें, जिसका आप उपयोग नहीं कर रहे हैं:

  • कुछ डिबग चर को अक्षम करें जो आपके मेमोरी संसाधनों पर प्रभाव डाल सकते हैं, जैसे कुछ उदाहरण drush:

    drush -y vset rules_debug 0
    drush -y vset rules_debug_log 0
  • कुछ PHP एक्सटेंशन को अक्षम करें, जैसे कि XDebug,

  • रेडिस / मेम्केच्ड कैश और कुछ PHP कैश (जैसे OPCache / XCache) सक्षम करें,
  • अंत में अगर ऊपर मदद नहीं करेगा - अपने PHP विन्यास में वृद्धिmemory_limit

यदि आप मेमोरी की सीमा बढ़ाने का निर्णय लेते हैं, तो यहां बहुत से लोग 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, इसलिए ड्रुपल यूआई ठीक काम कर रहा था। धन्यवाद!
मेरो मारची

1

आप इस मेमोरी सीमा को नियंत्रित करने के लिए एक मॉड्यूल का उपयोग कर सकते हैं। PHP रनटाइम कॉन्फिगरेटर मॉड्यूल आपकी php.ini फ़ाइल को बदले बिना कॉन्फ़िगर करने और Apache को पुनरारंभ करने के लिए कई विकल्प प्रदान करता है।

आप निम्न मापदंडों को कॉन्फ़िगर कर सकते हैं:

  • फ़ाइल अपलोड सीमा
  • मेमोरी सीमा
  • अधिकतम निष्पादन समय सीमा
  • अधिकतम इनपुट परिवर्तनीय सीमा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.