php cli मेमोरी लिमिट


35

मुझे php क्रोन जॉब में मेमोरी एरर मिल रहा है:

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 71 bytes) in /opt/matrix/core/lib/DAL/DAL.inc on line 830

Crontab के लागू भागों हैं:

$ sudo crontab -u www-data -l
MAILTO=root
# m h  dom mon dow   command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix

मैं डेबियन स्क्वीज़ पर चल रहा हूं, पूरी तरह से अपडेटेड।

स्पष्ट समाधान यह होगा कि cli की मेमोरी की सीमा कम है (64MB की)। हालाँकि, /etc/php5/cli/php.ini का कहना है कि यह असीमित है।

$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1

मैंने कहीं पढ़ा कि यह अलग-अलग उपयोगकर्ताओं के लिए अलग-अलग हो सकता है, और जब से यह प्रक्रिया www-data के रूप में चल रही है, मैं भाग गया:

$ sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0

यहां तक ​​कि अपाचे / php.ini में त्रुटि का दावा करने की तुलना में एक उच्च सीमा है:

$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M

मुझे किसकी याद आ रही है? यह स्मृति सीमा कहां है?

जवाबों:


61

IIRC, एक असीमित memory_limit CLI द्वारा समर्थित नहीं है (मैं इसके लिए एक स्रोत खोजने की कोशिश करूँगा), लेकिन अभी के लिए, इसे कमांड में पास करने का प्रयास करें:

php -d memory_limit=128M my_script.php

अद्यतन करें

जाहिरा तौर पर मैं php cli के लिए असीमित memory_limit का समर्थन नहीं करने के बारे में सपना देख रहा था। इसके बावजूद, ऐसा लगता है कि आईआईएन से मूल्य को अनदेखा किया गया है। सबसे सरल समाधान तो विशेष रूप से स्क्रिप्ट को कॉल करने वाले php कमांड में सेट किया जाना चाहिए।

UPDATE2

स्मृति सीमा कहां से आ रही है, इस सवाल का जवाब देने के लिए, यह सबसे अधिक संभावना है कि स्क्रिप्ट में 'ini_set' का उपयोग करके सेट किया जा रहा है।


यह डिस्क डेबियन डिफ़ॉल्ट कॉन्फ़िगरेशन है, मुझसे कुछ खास नहीं है। अजीब बात है, ऊपर की टिप्पणी यह ​​कहती है कि यह मेमोरी सीमा को 128 एमबी बनाता है।
रयान एच।

Hrm, का मान कहाँ से आ रहा है (जो वास्तविक प्रश्न है / स्पष्ट रूप से पढ़ने में असफलता) क्या आपके पास कोड में कोई ini_set memory_limit है?
DTest

रन php --ini विन्यास फाइल की एक सूची प्रिंट करने के लिए इसे पढ़ रहा है। FreeBSD कॉन्फ़िगरेशन में यह मुख्य /usr/local/etc/php.ini
एलन जुड

ऐसा लगता है कि स्क्रिप्ट स्मृति को आंतरिक रूप से इस मान पर सेट कर रही है। मेरी मदद करने के लिए धन्यवाद बाकी सब कुछ। मैं वास्तव में ऐसा नहीं चाहता था! -D टिप के लिए धन्यवाद।
रयान एच

1
स्क्रिप्ट आंतरिक रूप से अनुप्रयोग के लिए अपनी स्मृति सीमा निर्धारित करता है। इसे 64 एमबी पर सेट किया गया था। मुझे इसे खोजने में मदद करने के लिए धन्यवाद।
रयान एच

0

CLI php संस्करण का परीक्षण करते समय 5.5.9यह प्रतीत होता है कि cli में यह डिफ़ॉल्ट रूप से मेमोरी सीमा को अनलिमिडेट करता है, और निर्दिष्ट php -d memory_limit=4G my_script.phpकरने से उस पर एक सीमा निर्धारित होगी।


यह सही नहीं है, CLI सिर्फ php.ini फ़ाइल में निर्दिष्ट मेमोरी_लिमिट सेटिंग का पालन करेगा
टिम

-3

यदि आप PHP को अपाचे मॉड्यूल के रूप में स्थापित करते हैं ('सर्वर एपीआई' की जांच करें phpinfo()), तो आपको इसे क्रॉन जॉब में कमांड लाइन वेब ब्राउज़र (wget, curl, lynx, ...) के माध्यम से कॉल करना चाहिए।

*/15 * * * * lynx -dump http://localhost/script.php >> /var/log/script.log 2>&1

यह सिर्फ Apache पर अधिक मेमोरी बर्बाद करता है। SAPI और CLI दोनों स्थापित हैं, इसलिए इस मामले में CLI का उपयोग करना सबसे अच्छा है।
एलन जुड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.