सर्वर वेबपृष्ठों के लिए अपाचे मॉड्यूल के रूप में चल रहे PHP के memory_limit
के लिए कॉन्फ़िगरेशन को ध्यान में रखना होगा कि मशीन पर एक ही समय में आप कितनी अपाचे प्रक्रिया कर सकते हैं - अपाचे के लिए MaxClients
कॉन्फ़िगरेशन विकल्प देखें।
यदि MaxClients
100 है और आपके पास 2,000 एमबी या रैम है, तो बहुत तेज़ गणना दिखाएगी कि आपको 20 एमबी * से अधिक का उपयोग नहीं करना चाहिए (क्योंकि 20 एमबी * 100 क्लाइंट = 2 जीबी या रैम, यानी कुल राशि स्मृति आपके सर्वर में है) * स्मृति_limit मान के लिए।
और यह इस बात पर विचार किए बिना है कि अन्य सर्वर एक ही सर्वर पर चल रहे हैं, जैसे MySQL, सिस्टम स्वयं ... और यह कि अपाचे शायद पहले से ही कुछ स्मृति का उपयोग कर रहा है।
या पाठ्यक्रम, यह भी एक "सबसे खराब स्थिति परिदृश्य" है, जो मानता है कि प्रत्येक PHP पृष्ठ अधिकतम मेमोरी का उपयोग कर रहा है।
आपके मामले में, यदि आप केवल एक नौकरी के लिए स्मृति की इतनी बड़ी राशि की जरूरत है, मैं memory_limit
पीएचपी एक अपाचे मॉड्यूल के रूप में चलाने के लिए वृद्धि नहीं होगी।
इसके बजाय, मैं कमांड लाइन (या एक क्रॉन जॉब के माध्यम से) से उस काम का शुभारंभ, और यह एक और केवल मामले में specificaly एक उच्च memory_limit
निर्दिष्ट करना होगा।
यह, php के -d
विकल्प के साथ किया जा सकता है जैसे:
$ php -d memory_limit=1GB temp.php
string(3) "1GB"
ध्यान में रखते हुए इस मामले में, कि temp.php केवल शामिल हैं:
var_dump(ini_get('memory_limit'));
मेरी राय में, यह है Apache के लिए PHP मॉड्यूल के लिए memory_limit को बढ़ाने से सुरक्षित तरीका - और यह आमतौर पर तब होता है जब मेरे पास एक बड़ा डेटासेट होता है, या कुछ वास्तव में भारी चीजें जिन्हें मैं अनुकूलित या पेजिनेट नहीं कर सकता।
यदि आपको PHP सीएलआई निष्पादन के लिए कई मान परिभाषित करने की आवश्यकता है, तो आप डिफ़ॉल्ट php के बजाय इसे अन्य कॉन्फ़िगरेशन फ़ाइल का उपयोग करने के लिए भी कह सकते हैं।आरं, -c
विकल्प के साथ:
php -c /etc/phpcli.ini temp.php
इस तरह, आप है:
- अपाचे के लिए
/etc/php.ini
, कम memory_limit
साथ, कम max_execution_time
...
- और बैचों के लिए
/etc/phpcli.ini
आदेश से चलाने -लाइन, लगभग कोई सीमा
यह सुनिश्चित करता है कि आपके बैच चलने में सक्षम होंगे - और आप अभी भी
फिर भी अपनी वेबसाइट (memory_limit
और max_execution_time
जा रहा है सुरक्षा उपायों) के लिए सुरक्षा है, अगर आप समय अपनी स्क्रिप्ट, आपको चाहिए अनुकूलन करने के लिए है, उदाहरण के लिए, उस तरह की स्थिति में जहां आपको बहुत सारे डेटा से निपटना होगा, पेजिनेशन एक होना चाहिए ;-)
ईमानदारी से आपको स्मृति सीमा निर्धारित करने से चिंतित नहीं होना चाहिए, लेकिन यह पता लगाने के साथ कि आपकी मेमोरी लीक कहां है और इसे ठीक कर रहा है। यह स्मृति_लिमिट को बढ़ाने का कोई समाधान नहीं है, यह कोड में एक समस्या से परहेज कर रहा है। देखें कि आप कौन सी ऑब्जेक्ट्स सेट कर रहे हैं और रिसाव को साफ़ करने के लिए मूल्यों को अनसेट कर रहे हैं। – Petrogad
क्या आप डेटा की मात्रा के बारे में विशिष्ट हो सकते हैं? बड़े से आपका क्या मतलब है? – jergason
@ फ़्रेडरिको: ओपी मेमोरी रिसाव को ठीक करने की कोशिश नहीं कर रहा है, वह PHP में बहुत बड़े डेटासेट को संभालने के लिए एक समाधान मांग रहा है। – arul