আপনার মেমরির ব্যবহারকে সীমাবদ্ধ করার জন্য দুটি পন্থা রয়েছে: প্রাক্তন পোস্ট ফ্যাক্টো এবং প্রাক-প্রতিরোধী। এর অর্থ হল, আপনি আপনার প্রোগ্রামটি খুব বেশি বড় হয়ে যাওয়ার পরে হত্যা করার চেষ্টা করতে পারেন, বা আপনি এটির প্রোগ্রামটি প্রথমদিকে খুব বড় না হওয়ার জন্য করতে পারেন।
আপনি যদি প্রাক্তন পোস্টের ফ্যাক্টো পদ্ধতির উপর জোর দিয়ে থাকেন তবে আপনি নীচের বাশ স্ক্রিপ্টটি ব্যবহার করতে পারেন। এই স্ক্রিপ্টটি প্রথমে মেমরির পরিমাণ ("রেসিডেন্ট সেট আকার" দ্বারা নির্ধারিত হিসাবে) প্রসেসিড পিড ব্যবহার করে প্রক্রিয়াটি ব্যবহার করে, গ্রেপ ব্যবহার করে সমস্ত অ-সংখ্যাসূচক ডেটা ফিল্টার করে এবং পরিমাণটিকে পরিবর্তনশীল এন হিসাবে সংরক্ষণ করে। স্ক্রিপ্টটি তখন পরীক্ষা করে দেখুন যে এন আপনার নির্দিষ্ট x এর চেয়ে বড় কিনা। যদি তা হয় তবে প্রসেসিড পিড সহ প্রক্রিয়াটি মারা যায়।
দয়া করে নোট করুন:
- আপনাকে অবশ্যই
<pid>
আপনার প্রোগ্রামটির প্রসেস আইডি দিয়ে প্রতিস্থাপন করতে হবে ।
- আপনাকে অবশ্যই
<x>
আরএসএস = "আবাসিক সেট আকার" (অর্থাত্ রিয়েল মেমরি আকার) দিয়ে প্রতিস্থাপন করতে হবে যা আপনি চান না যে প্রোগ্রামটি অতিক্রম করবে।
n=$(ps -<pid> -o rss | grep '[0-9]')
if [ $n -gt <x> ]; then kill -9 <pid>; fi
আপনি যদি প্রতি y সেকেন্ডে এটি চালাতে চান তবে এটি কেবল একটি লুপে আবদ্ধ করুন এবং প্রতিটি পুনরাবৃত্তির পরে y সেকেন্ডের জন্য অপেক্ষা করতে বলুন। আপনি একই জাতীয় কমান্ড ব্যবহার করে লিখতে পারেন top
। আপনার সূচনা পয়েন্ট হবে top -l 1|grep "<pid>"|awk '{print $10}'
।
@ কেনরবের উত্তর আমাকে আমার স্ক্রিপ্টে সহায়তা করেছিল
যদিও আমি বিশ্বাস করি যে প্রশ্নের উত্তর, দীর্ঘমেয়াদে আমি বিশ্বাস করি ম্যানুয়াল মেমোরি বরাদ্দ ব্যবহার করে একটি প্রাকটিক পদ্ধতি গ্রহণ করা আরও ভাল প্রোগ্রামিং ডিজাইন।
প্রথমত, আপনি কি নিশ্চিত যে মেমরির ব্যবহার সত্যিই একটি সমস্যা? গো ডকুমেন্টেশনে বলা হয়েছে:
গো মেমরির বরাদ্দকারী বরাদ্দ দেওয়ার ক্ষেত্র হিসাবে ভার্চুয়াল মেমরির একটি বৃহত অঞ্চল সংরক্ষণ করে। এই ভার্চুয়াল মেমরিটি নির্দিষ্ট গো প্রক্রিয়াতে স্থানীয়; সংরক্ষণ মেমরির অন্যান্য প্রক্রিয়া বঞ্চিত করে না।
আপনি যদি এখনও মনে করেন যে আপনার কোনও সমস্যা আছে, তবে আমি আপনাকে সি ম্যাসেজিং ভাষা হিসাবে মেমোরি নিজে ম্যানেজ করতে উত্সাহিত করি। যেহেতু গো সি তে লিখিত হয়েছে, আমি সন্দেহ করেছি যে সি মেমরি পরিচালনা / বরাদ্দে প্রবেশের উপায় থাকবে এবং প্রকৃতপক্ষে রয়েছে। এই গিথুব সংগ্রহস্থলটি দেখুন যা,
আপনাকে আপনার সিস্টেমের জন্য স্ট্যান্ডার্ড সি বরাদ্দকরণের মাধ্যমে ম্যানুয়াল মেমরি পরিচালনা করতে দেয়। এটি ম্যালোক, কলোকের উপরে একটি পাতলা মোড়ক এবং এ থেকে মুক্ত। আপনার সিস্টেমের জন্য এই ফাংশনগুলির বিশদ জানতে ম্যান ম্যালোক দেখুন। এই লাইব্রেরিতে cgo ব্যবহার করা হয়েছে।
ব্যবহারের ক্ষেত্রে হিসাবে দেওয়া হয়:
কেন আপনি এই চায়?
যখন কোনও প্রোগ্রাম মেমরির চাপ সৃষ্টি করে বা সিস্টেমটি মেমরির বাইরে চলে যায় তখন মেমরির বরাদ্দ এবং অবনতি ম্যানুয়ালি নিয়ন্ত্রণ করতে সহায়ক হতে পারে। গো আপনাকে বরাদ্দগুলি নিয়ন্ত্রণ করতে সহায়তা করতে পারে তবে স্পষ্টতই অনিবদ্ধ ডেটা অপসারণ করা সম্ভব নয়।
এটি আরও দীর্ঘমেয়াদী সমাধান হিসাবে মনে হচ্ছে।
আপনি যদি সি সম্পর্কে আরও জানতে চান (মেমরি পরিচালনা সহ),
সি প্রোগ্রামিং ভাষা হ'ল মানক রেফারেন্স।