কীভাবে শেল স্ক্রিপ্টে স্মৃতি সীমা চাপিয়ে দেওয়া যায়?


10

আমার একটি পিএইচপি স্ক্রিপ্ট রয়েছে যা কোনও ফোল্ডারে এক্সএমএল ফাইল রয়েছে, এটি তাদের ডাটাবেসে প্রসেস করবে।

বর্তমানে, সার্ভারটি পিএইচপি সংস্করণ 5.3.10 চলছে এবং একটি লুপের সাহায্যে মেমরি সমস্যা সম্পর্কিত একটি বাগ রিপোর্ট রয়েছেZEND_MM_HEAP

এটি পিএইচপিকে সঠিকভাবে মেমরি মুক্ত করতে দেয় না, ফলে ত্রুটি এবং স্ক্রিপ্ট ক্র্যাশ হয়:

 zend_mm_heap is corrupted

কিছু সমাধান পাওয়া গেছে, তবে সার্ভার সেটিংসে আমার অ্যাক্সেস নেই।

এটি মোকাবেলা করার জন্য, আমি এক্সএমএল ফাইল প্রক্রিয়াকরণ করে পিএইচপি স্ক্রিপ্টকে কেবল দায়ী রেখে লুপটির যত্ন নেওয়ার জন্য নিম্নলিখিত বাশ স্ক্রিপ্টটি প্রস্তুত করেছি:

#!/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

আপনি অনুসরণ করে একটি বাশ স্ক্রিপ্ট দ্বারা মেমরির ব্যবহার সীমাবদ্ধ করতে পারেন।

কেবি দ্বারা মেমরির ব্যবহার সীমাবদ্ধ করুন (এই উদাহরণে 2 জিবি):

ulimit -m 2048000

ভার্চুয়াল মেমরির ব্যবহার সীমিত করুন:

ulimit -v 2048000

ভার্চুয়াল মেমরি সীমাটিকে হার্ড সীমা হিসাবে সেট করুন, যাতে এই সীমাটি অতিক্রম করে এই প্রক্রিয়াটি মারা যাবে:

ulimit -H -v

আমি মনে করি এটি আপনার যা করতে পারে তা করতে পারে।


1
এই সীমাটিও শিশু প্রসেসের জন্য গণনা করে? উদাহরণস্বরূপ, যদি আমি এই ব্যাশ স্ক্রিপ্টটিতে কোনও ত্রুটিযুক্ত আরপিএল উত্সাহিত করি, তবে কি স্মৃতির সীমাটি আরোপ করা হবে?
ক্রিস্টোফ ডি ট্রয়ের

2
@ ক্রিসটফিডেট্রোয়ার সীমাটি শিশু প্রক্রিয়াগুলির দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হবে, তাই শিশু প্রক্রিয়াগুলি এর বেশি হতে পারে না। তবে এই সীমাটি সমস্ত প্রক্রিয়া ট্রিতে প্রয়োগ করা হবে না।
কার্টুনিস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.