शेल स्क्रिप्ट पर मेमोरी लिमिट कैसे लगाई जाए?


10

मेरे पास एक PHP स्क्रिप्ट है, जबकि एक फ़ोल्डर में XML फाइलें होती हैं, उन्हें डेटाबेस पर संसाधित करेगा।

वर्तमान में, सर्वर PHP संस्करण 5.3.10 चला रहा है और लूप के भीतर ट्रिगर होने वाली मेमोरी समस्याओं के बारे में एक बग रिपोर्ट हैZEND_MM_HEAP

यह PHP को मेमोरी को ठीक से मुक्त नहीं करने का कारण बनता है, इस प्रकार एक त्रुटि और एक स्क्रिप्ट क्रैश के कारण होता है:

 zend_mm_heap is corrupted

कुछ समाधान पाए जाते हैं, लेकिन मेरे पास सर्वर सेटिंग्स तक पहुंच नहीं है।

इससे निपटने के लिए, मैंने लूप का ध्यान रखने के लिए निम्नलिखित बैश स्क्रिप्ट तैयार की है, केवल PHP फाइल को संसाधित करके PHP स्क्रिप्ट को छोड़कर:

#!/bin/bash

# Check for files to process
# If files are present, call
# the PHP script

DIR="/path/to/dir/with/files"
while [ "$(ls -A $DIR)" ]; do
        php /path/to/php/script/myscript.php
done

मेरा लक्ष्य अब इस बैश मेमोरी एलोकेशन (मेमोरी और वर्चुअल मेमोरी) को सीमित करना है, इस प्रकार यह सिस्टम को लटका देने से रोकता है अगर कुछ गलत होता है।

मेरा प्रश्न है:
मैं इस शेल स्क्रिप्ट द्वारा उपयोग की गई मेमोरी को एक विशेष राशि तक कैसे सीमित कर सकता हूं?


1
कृपया ध्यान दें कि आप मेमोरी को आवंटित करने के तरीके को बदल कर उपयोग कर सकते हैं export USE_ZEND_ALLOC=0
पेड्रो कॉर्डिएरो

जवाबों:


12

आप अनुसरण करते हुए, एक बैश स्क्रिप्ट द्वारा मेमोरी उपयोग को सीमित कर सकते हैं।

केबी द्वारा मेमोरी उपयोग को सीमित करें (इस उदाहरण में 2GB):

ulimit -m 2048000

आभासी मेमोरी का उपयोग सीमित करें:

ulimit -v 2048000

वर्चुअल मेमोरी लिमिट को हार्ड लिमिट पर सेट करें, ताकि इस सीमा से अधिक होने पर प्रक्रिया को मार दिया जाए:

ulimit -H -v

मुझे लगता है कि यह वही कर सकता है जो आप चाहते हैं।


1
क्या यह सीमा बाल प्रक्रियाओं के लिए भी है? उदाहरण के लिए, यदि मैं इस बैश स्क्रिप्ट में एक एरलैंग आरईपीएल स्पॉन करता हूं, तो क्या मेमोरी की सीमा लागू होगी?
क्रिस्टोफ डे ट्रॉयर

2
@ChristopheDeTroyer सीमा बाल प्रक्रियाओं द्वारा विरासत में मिली होगी, इसलिए बाल प्रक्रियाएं इससे अधिक नहीं हो सकती हैं। लेकिन यह सीमा सभी प्रोसेस ट्री पर लागू नहीं होगी।
कार्टूनिस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.