दिलचस्प पोस्ट
SQLite और साझा वरीयताओं के पेशेवरों और विपक्ष Collections.emptyList () बनाम नया उदाहरण एंड्रॉइड स्टूडियो इम्यूलेटर एपीआई 23 के लिए प्ले स्टोर से नहीं आता है Redis + ActionController :: लाइव थ्रेड मर नहीं रहे हैं कैसे एक div तत्व करने के लिए onload घटना जोड़ने के लिए? विशिष्ट उपयोगकर्ता इनपुट तक डुप्लिकेट आईओ के लिए डेकोरेटर पैटर्न निर्देशक के भीतर टेम्पलेट को कस्टमाइज़ करना क्या ब्राउज़र की चौड़ाई पर आधारित पाठ आकार गतिशील रूप से संभव है? मल्टिप्रोसिंग के लिए अलग-अलग प्रक्रियाओं में कॉपी किए गए डेटा को साझा किया गया है? अरबी भाषा के लिए नियमित अभिव्यक्ति अपरिवर्तनीय बनाम परिवर्तन योग्य प्रकार माइक्रोसॉफ्ट का उपयोग कर मानव पठनीय तारीख में यूनिक्स टाइमस्टैम्प को कनवर्ट करें I यदि कोई कुंजी मौजूद नहीं है तो डिफ़ॉल्ट मान लौटाता है ऑनटच और ऑनक्लिक एंड्रॉइड के बीच अंतर

PHP में "पूल के लिए स्मृति आवंटित करने में असमर्थ" क्या कारण है?

मैं कभी-कभी एक सर्वर की स्मृति आवंटन सीमा के खिलाफ चला जाता हूं, विशेष रूप से WordPress जैसे फूला हुआ अनुप्रयोग के साथ, लेकिन कभी भी "पूल के लिए मेमोरी आवंटित करने में असमर्थ" और कभी भी किसी भी सूचना को ट्रैक करने में परेशानी नहीं हुई

क्या किसी को पता है कि इसका क्या मतलब है? मैंने सफलता के बिना memory_limit को बढ़ाने की कोशिश की है मैंने भी आवेदन में कोई महत्वपूर्ण बदलाव नहीं किया है। एक दिन कोई समस्या नहीं थी, अगले दिन मैंने इस त्रुटि को मारा।

वेब के समाधान से एकत्रित समाधान "PHP में "पूल के लिए स्मृति आवंटित करने में असमर्थ" क्या कारण है?"

शायद एपीसी संबंधित है

इस समस्या वाले लोगों के लिए, कृपया .ini सेटिंग्स को निर्दिष्ट करें। विशेष रूप से आपके apc.mmap_file_mask सेटिंग

फ़ाइल समर्थित एमएमएपी के लिए, इसे कुछ ऐसा सेट करना चाहिए:

 apc.mmap_file_mask=/tmp/apc.XXXXXX 

सीधे / dev / शून्य से mmap के लिए, उपयोग करें:

 apc.mmap_file_mask=/dev/zero 

POSIX- संगत साझा-मेमोरी-समर्थित एमएएमएपी के लिए, उपयोग करें:

 apc.mmap_file_mask=/apc.shm.XXXXXX 

0 का टीटीएल का उपयोग करने का अर्थ है कि जब एपीसी मेमोरी से बाहर निकल जाए तो सभी कैश फ्लश हो जाएंगे। त्रुटि अब प्रकट नहीं हुई है लेकिन यह एपीसी को बहुत कम कुशल बनाता है यह कोई जोखिम नहीं है, कोई परेशानी नहीं, "मैं अपना काम नहीं करना चाहता" निर्णय एपीसी इस तरह से इस्तेमाल नहीं किया जाता है आपको एक टीटीएल काफी अधिक चुनना चाहिए ताकि सबसे अधिक पन्नों को समाप्त न हो जाए। एपीसी को कैश फ्लश करने की आवश्यकता नहीं है, इसलिए पर्याप्त स्मृति देना है।

यह जानने के लिए मैन्युअल पढ़ें कि टीटीएल कैसे प्रयोग किया जाता है: http://www.php.net/manual/en/apc.configuration.php#ini.apc.ttl

समाधान एपीसी को आवंटित स्मृति बढ़ाने के लिए है इसे apc.shm_size बढ़ाने से करें

अगर एपीसी साझा सेगमेंट मेमोरी का उपयोग करने के लिए संकलित है तो आप अपने ऑपरेटिंग सिस्टम द्वारा सीमित होंगे। प्रत्येक सेगमेंट के लिए अपनी सिस्टम सीमा देखने के लिए यह कमांड टाइप करें:

 sysctl -a | grep -E "shmall|shmmax" 

अधिक स्मृति को आवंटित करने के लिए आपको पैरामीटर apc.shm_segments के साथ सेगमेंट की संख्या में वृद्धि करना होगा।

अगर एपीसी एमएमएपी मेमोरी का इस्तेमाल कर रहा है तो आपके पास कोई सीमा नहीं है। स्मृति की मात्रा अभी भी एक ही विकल्प apc.shm_size द्वारा परिभाषित है

यदि सर्वर पर पर्याप्त मेमोरी नहीं है, तो कैश से कम अक्सर एक्सेस किए गए php फ़ाइलों को रोकने के लिए फ़िल्टर विकल्प का उपयोग करें।

लेकिन 0 का टीटीएल का उपयोग कभी नहीं करें

के रूप में c33s ने कहा, ap config.php का उपयोग करने के लिए अपने config जांच। फ़ाइल को एपीसी पैकेज से वेबफ़ोल्डर और पॉइंट ब्राउजर पर कॉपी करें। आप देखेंगे कि वास्तव में क्या आवंटित किया गया है और इसका उपयोग कैसे किया जाता है। ग्राफ़ को घंटे के बाद स्थिर रहने चाहिए, अगर वे प्रत्येक रीफ्रेश पर पूरी तरह से बदल रहे हैं, तो इसका मतलब है कि आपका सेटअप गलत है (एपीसी सब कुछ फ़्लशिंग है)। एपीसी वास्तव में एक सुरक्षा मार्जिन के रूप में उपयोग करने से 20% अधिक मेम आवंटित करें, और इसे नियमित आधार पर जांचें।

केवल 32 एमबी की अनुमति देने का डिफ़ॉल्ट हास्यास्पद कम है PHP बनाया गया था जब सर्वर 64 एमबी थे और अधिकांश स्क्रिप्ट प्रति पृष्ठ एक PHP फ़ाइल का उपयोग कर रहे थे। आजकल समाधान जैसे Magento को 10k से अधिक फ़ाइलें (एपीसी में ~ 60 एमबी) की आवश्यकता होती है आपको पर्याप्त मेमोरी की अनुमति होनी चाहिए ताकि ज्यादातर php फ़ाइलों को हमेशा कैश्ड किया जाए। यह बर्बाद नहीं है, फ़ाइल कैश में संबंधित कच्चे फाईपी होने के बजाय रैंप में opcode रखने के लिए अधिक कुशल है आजकल हम समर्पित सर्वर को 24 जीबी मेमोरी के साथ $ 80 / माह जितना कम कर सकते हैं, इसलिए कई जीबी को एपीसी की अनुमति देने में संकोच न करें। मैं 24 जीबी के 2 जीबी को 5 मेगैन्टो स्टोर्स और ~ 40 वर्डप्रेस वेबसाइट की मेजबानी करने वाले सर्वर पर रख दिया है, एपीसी 1.2 जीबी का उपयोग करता है। Magento स्थापना के लिए 64MB गणना, कुछ प्लगइन्स के साथ एक WordPress के लिए 40MB

इसके अलावा, यदि आपके पास उसी सर्वर पर डेवलपमेंट वेबसाइट है उन्हें कैश से निकालें

मेरे लिए समाधान:

  • apc.ttl = 0
  • apc.shm_size = आप जो चाहें

संपादित करें प्रारंभ करें

चेतावनी!

@ टोकन ने मुझे संकेत दिया कि मुझे यहां एक चेतावनी जोड़नी चाहिए।

यदि आपके पास 0 का एक टीटीएल है तो इसका मतलब है कि हर कैश्ड आइटम को तुरंत शुद्ध किया जा सकता है इसलिए यदि आपके पास एक छोटा कैश आकार 2MB और 0 का एक टीटीएल है, तो यह एपीसी बेकार रेंडर करेगा, क्योंकि कैशे में डेटा हमेशा ओवरराइट होता है

टीटीएल को कम करने का मतलब केवल यह है कि कैश पूर्ण नहीं हो सकता, केवल उन वस्तुओं के साथ जो बदला नहीं जा सकता।

इसलिए आपको टीटीएल और कैश आकार के बीच एक अच्छा संतुलन चुनना होगा।

मेरे मामले में मेरे पास 1 जीबी का कैश आकार था, इसलिए यह मेरे लिए पर्याप्त था

अंत संपादित करें

php 5.2.17 के साथ सेंटीस 5 पर एक ही मुद्दा था और यह देखा गया कि अगर कैश का आकार छोटा है और टीटीएल पैरामीटर "उच्च" (7200 की तरह) कैश में बहुत सी पीएचपी फाइलों को लेकर है, तो कैश काफी तेजी से भरता है और एपीसी कुछ भी नहीं पाता है जो इसे हटा सकता है क्योंकि कैश में सभी फाइलें अब भी टीटीएल में फिट हैं।

मेमोरी आकार बढ़ाना केवल एक हिस्सा समाधान है, यदि आप कैश भरते हैं और सभी फाइलें टीटीएल के भीतर हैं, तो आप अभी भी इस त्रुटि में चल रहे हैं

तो मेरा समाधान 0 तक टीटीएल सेट करना था, इसलिए एपीसी कैश को भरता है, एपीसी के लिए नए डाटा के लिए कुछ मेमोरी साफ करने की संभावना है।

उम्मीद है की वो मदद करदे

संपादित करें: यह भी देखें: http://pecl.php.net/bugs/bug.php?id=16966

http://pecl.php.net/get/APC निकालें डाउनलोड करें और apc.php चलाएं, वहां आपके पास एक अच्छा आरेख है कि आपका कैशे उपयोग कैसा दिखता है

Apc.php स्क्रिप्ट चलाना महत्वपूर्ण है कि आपकी समस्या क्या है, आईएमओ इससे हमें हमारे कैश को ठीक से आकार देने में मदद मिली और क्षण के लिए, इस समस्या का समाधान किया है।

मेरे जैसे नए लोगों के लिए, इन संसाधनों ने मदद की:

उपरोक्त c33s द्वारा अनुशंसित परिवर्तनों को बनाने के लिए apc.ini फ़ाइल ढूँढना, और सिफारिश की गई मात्रा निर्धारित करना: http://www.untwistedvortex.com/optimizing-tuning-apc-alternate-php-cache/

एपीसीटीएल क्या है, इसे समझना: http://www.php.net/manual/en/apc.configuration.php#ini.apc.ttl

क्या apc.shm_size है: http://www.php.net/manual/en/apc.configuration.php#ini.apc.shm- आकार को समझना

जैसा कि बोकान ने उल्लेख किया है, यदि आप उपलब्ध हैं तो आप मेमोरी कर सकते हैं, और वह सही है कि कैसे टीटीएल को 0 से मुकाबला करता है।

नोट: यह है कि मैंने इस त्रुटि को मेरी विशेष समस्या के लिए तय किया है। यह एक सामान्य समस्या है जो चीजों को आवंटित करने के कारण हो सकती है, यदि आपको त्रुटि मिलती है और आपको लगता है कि इसकी वजह से डुप्लिकेट PHP फाइलें APC में भरी हुई हैं

मेरे द्वारा किया गया मुद्दा तब था जब मैंने अपने PHP अनुप्रयोग का एक नया संस्करण जारी किया था। Ie नए सभी एपीसी के साथ मेरी सभी .php फ़ाइलों को प्रतिस्थापित कैश में दोनों संस्करणों लोड होगा।

क्योंकि मुझे php फ़ाइलों के दो संस्करणों के लिए पर्याप्त स्मृति नहीं थी क्योंकि एपीसी स्मृति से बाहर निकल जाएगा

एपीसीएसटी नामक एक विकल्प है जो कि एपीसी को यह बताने के लिए कि एक विशेष फाइल बदल गई है और अगर इसे बदलती है, तो यह आम तौर पर विकास के लिए ठीक है क्योंकि आप लगातार परिवर्तन कर रहे हैं, लेकिन इसका उत्पादन आमतौर पर बंद है क्योंकि यह मेरे साथ था मामले – http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat

यदि आप प्रदर्शन हिट के साथ ठीक हैं तो apc.stat चालू करना इस समस्या को ठीक करेगा।

मेरी समस्या के लिए मैंने जो समाधान उठाया है, वह जांच है कि क्या परियोजना का संस्करण बदल गया है और यदि ऐसा है तो कैश खाली करें और पृष्ठ को पुनः लोड करें।

 define('PROJECT_VERSION', '0.28'); if(apc_exists('MY_APP_VERSION') ){ if(apc_fetch('MY_APP_VERSION') != PROJECT_VERSION){ apc_clear_cache(); apc_store ('MY_APP_VERSION', PROJECT_VERSION); header('Location: ' . 'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); exit; } }else{ apc_store ('MY_APP_VERSION', PROJECT_VERSION); } 

इन्टरनेट को देखते हुए कई कारण हो सकते हैं। मेरे मामले में छोड़कर सब कुछ डिफ़ॉल्ट छोड़कर …

 apc.shm_size = 64M 

… अनगिनत चेतावनियों को मंजूरी दे दी है जिन्हें मैं पहले मिल रहा था

मैं एक अलग सर्वर पर एक OpenCart स्थापना को स्थानांतरित करने के बाद "पूल के लिए स्मृति आवंटित करने में असमर्थ" त्रुटि प्राप्त की है। मैंने स्मृति _limit को बढ़ाने की भी कोशिश की।

त्रुटि संदेश में फ़ाइल की अनुमतियों को परिवर्तित करने के बाद त्रुटि को रोक दिया गया है ताकि एपाचे (एपाचे, www-डेटा आदि) के रूप में चलाए जा सकें। / Etc / group को सीधे संशोधित करने के बजाय (या फाइल को 0777 में चिपकाने के लिए), मैं यूजरमोड का इस्तेमाल किया:

 usermod -a -G vhost-user-group apache-user 

तब मुझे बदलाव के लिए अपाचे को पुन: प्रारंभ करना पड़ा:

 apachectl restart 

या

 sudo /etc/init.d/httpd restart 

या जो भी आपके सिस्टम अपाचे को पुनः आरंभ करने के लिए उपयोग करता है

यदि साइट साझा की गई होस्टिंग पर है, तो संभवतः आपको किसी FTP प्रोग्राम से फ़ाइल अनुमतियां बदलनी होंगी या होस्टिंग प्रदाता से संपर्क करना चाहिए?

यह हमारे लोगों के लिए काम किया (एक ही सर्वर पर WordPress साइट्स के कई चल रहे हैं)

/etc/php.d/apc.ini फ़ाइल में स्मृति सेटिंग्स परिवर्तित इसे 64 एम पर सेट किया गया था, इसलिए हमने इसे 128 एम तक दोगुना किया

apc.shm_size = 128M

अपने कैश्ड फाइल आकार की मॉनिटर करें (आप एपीसी पीपीएल पैकेज से एपीसीएफपी का उपयोग कर सकते हैं) और अपनी आवश्यकताओं के अनुसार एपीसीएसएमएमआकार बढ़ा सकते हैं।

यह समस्या हल करता है

Apc.shm_size के लिए इस समस्या को निर्धारित मान को पूर्णांक के रूप में अपने apc.ini फ़ाइल की स्थिति जानें (मेरे सिस्टम में apc.ini फ़ाइल स्थान /etc/php5/conf.d/apc.ini) और सेट करें: apc.shm_size = 1000

मेरे सिस्टम पर मुझे apsshsh_size = 64M को /usr/local/etc/php.ini (फ्रीबीएसएडी 9.1) में सम्मिलित करना था, जब मैंने एपीसीपीपी पर देखा (जो मैंने / usr / local / share / doc / एपीसी से कॉपी किया था /apr.php to / usr / local / www / apache24 / data) मैंने पाया है कि कैश का आकार 32 एम के डिफॉल्ट से 64 एम तक बढ़ गया है और मुझे अब बड़ी कैश पूरी तरह से नहीं मिल रहा है

संदर्भ: http://au1.php.net/manual/en/apc.configuration.php भी बोकान की टिप्पणियों को पढ़ा, वे बहुत उपयोगी थे