পিএইচপি ক্লাইম মেমরি সীমা


35

আমি পিএইচপি ক্রোন চাকরিতে একটি স্মৃতি ত্রুটি পেয়েছি:

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

ক্রোনটবের প্রযোজ্য অংশগুলি হ'ল:

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

আমি ডেবিয়ান স্কুইজে চলছে, পুরোপুরি আপডেট।

সুস্পষ্ট সমাধানটি হ'ল ক্লাইমের কম মেমরির সীমা থাকে (M৪ এমবি)। তবে, /etc/php5/cli/php.ini বলছে এটি সীমাহীন।

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

আমি কোথাও পড়েছি যে এটি বিভিন্ন ব্যবহারকারীর পক্ষে আলাদা হতে পারে এবং যেহেতু প্রক্রিয়াটি www-ডেটা হিসাবে চলছে, আমি দৌড়েছি:

$ 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

আইআইআরসি, একটি সীমাহীন মেমরি_লিমিট সিএলআই দ্বারা সমর্থিত নয় (আমি এটির জন্য কোনও উত্স সন্ধান করার চেষ্টা করব) তবে আপাতত, এটি কমান্ডের মধ্যে দিয়ে যাওয়ার চেষ্টা করুন:

php -d memory_limit=128M my_script.php

হালনাগাদ

স্পষ্টতই আমি স্বপ্ন দেখছিলাম যে সীমাহীন মেমরি_লিমিট পিএইচপি ক্লাইপের জন্য সমর্থনযোগ্য নয়। নির্বিশেষে, দেখে মনে হচ্ছে আইএনআই থেকে মান উপেক্ষা করা হয়েছে। সর্বাধিক সহজ সমাধানটি হ'ল বিশেষত স্ক্রিপ্টটি ডেকে পিএইচপি কমান্ডে সেট করা উচিত।

UPDATE2

মেমরি সীমাটি কোথা থেকে আসছে এই প্রশ্নের উত্তর দিতে, সম্ভবত এটি 'ini_set' ব্যবহার করে স্ক্রিপ্টে সেট করা সম্ভবত।


এই কনফটি হ'ল ডেবিয়ান ডিফল্ট কনফিগারেশন, আমার থেকে বিশেষ কিছু নেই। আশ্চর্যজনকভাবে, এর উপরে মন্তব্যটি বলে যে এটি মেমরির সীমা 128 মেগাবাইট করে দেয়।
রায়ান এইচ

এইচআরএম, মানটি কোথা থেকে আসছে (প্রশ্নটি যা আপাতদৃষ্টিতে প্রত্যাখ্যান করে / পড়ার অনুধাবন করতে ব্যর্থ হয়) কোডটিতে আপনার কোনও ইনসি_সেট মেমরি_লিট আছে?
ডিটিস্ট

এটি যে কনফিগারেশন ফাইলগুলি পড়ছে তার একটি তালিকা মুদ্রণের জন্য পিএইচপি --ini চালান। একটি ফ্রিবিএসডি কনফিগারেশনে এটি /usr/local/etc/php/*.ini এ ফাইলগুলি প্রধান /usr/local/etc/php.ini পড়ার পরে দেখাবে
অ্যালান জুড

মনে হচ্ছে স্ক্রিপ্টটি এই মানটিতে অভ্যন্তরীণভাবে মেমরি সেট করে setting আমাকে অন্য সব কিছুকে বাতিল করতে সাহায্য করার জন্য ধন্যবাদ। আমি সত্যিই এটি হতে চাই না! -ডি টিপের জন্য ধন্যবাদ।
রায়ান এইচ

1
স্ক্রিপ্টটি অভ্যন্তরীণভাবে অ্যাপ্লিকেশনটির নিজস্ব মেমরি সীমাটি সেট করে। এটি 64 এমবিতে সেট করা হয়েছিল। এটি খুঁজে পেতে আমাকে সাহায্য করার জন্য ধন্যবাদ।
রায়ান এইচ

0

একটি সিএলআই পিএইচপি সংস্করণ পরীক্ষা করার সময় 5.5.9এটি প্রদর্শিত হয় যে ক্লাইমে এটি ডিফল্টরূপে আনমিট মেমরি সীমা থাকে এবং নির্দিষ্টকরণ এতে php -d memory_limit=4G my_script.phpসীমাবদ্ধতা সেট করে ।


এটি সঠিক নয়, সিএলআই কেবলমাত্র php.ini ফাইলে নির্দিষ্ট করা মেমরি_লিট সেটিংস অনুসরণ করবে
টিম

-3

যদি আপনি পিএইচপিটিকে অ্যাপাচি মডিউল হিসাবে ইনস্টল করেন (ইন 'সার্ভার এপিআই' পরীক্ষা করুন phpinfo()), আপনার ক্রোন জবটিতে কমান্ড লাইন ওয়েব ব্রাউজারের (উইজেট, কার্ল, লিংক, ...) মাধ্যমে এটি কল করা উচিত: এরকম কিছু:

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

এটি কেবল অ্যাপাচে আরও স্মৃতি অপচয় করে। SAPI এবং CLI উভয়ই ইনস্টল করা আছে, তাই এই ক্ষেত্রে CLI ব্যবহার করা ভাল।
অ্যালান জুড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.