ইউনিক্স রিসোর্স ইউজেজ মাপতে হলে, আমাদের প্রোগ্রামে resource মডিউল ব্যবহার করতে হবে। এই মডিউল রিসোর্স ইউটিলাইজেশন কন্ট্রোল করতে পারেও।
এই মডিউল ব্যবহার করতে হলে, আমাদের এটি ইম্পোর্ট করতে হবে -
import resource
রিসোর্স লিমিট
এই মডিউলে আমরা setrlimit() ব্যবহার করে রিসোর্স ইউটিলাইজেশন লিমিট করতে পারি। রিসোর্স লিমিট করার জন্য দুটি প্যারামিটার রয়েছে। এগুলো হলো সফ্ট লিমিট এবং হার্ড লিমিট। সফ্ট লিমিট মূলত বর্তমান লিমিট, এটি প্রসেসের ওপর পরিবর্তন করা যায়, কিন্তু হার্ড লিমিট অতিক্রম করতে পারে না। হার্ড লিমিট সফ্ট লিমিটের উপরে যেকোনো মানে কমিয়ে দেওয়া যায়, কিন্তু বাড়ানো যায় না।
রিসোর্স লিমিটিং-এর সাথে সম্পর্কিত কিছু মেথড এবং কনস্ট্যান্ট রয়েছে। এগুলো হলো -
resource.getrlimit(resource) মেথড
এই মেথড সফ্ট এবং হার্ড লিমিট টাপল হিসেবে ফেরত দেয়। যদি নির্দিষ্ট রিসোর্স অবৈধ হয়, তবে এটি ValueError উত্থাপন করবে।
resource.setrlimit(resource, limits) মেথড
এই মেথড রিসোর্সগুলোর লিমিট সেট করতে ব্যবহৃত হয়। লিমিটগুলো সফ্ট এবং হার্ড লিমিটের টাপল হিসেবে অ্যাসাইন করা যায়। আমরা RLIM_INFINITY ব্যবহার করে আনলিমিটেড রিসোর্সও করতে পারি।
resource.prlimit(pid, resource[, limits]) মেথড
এই মেথড setrlimit() এবং getrlimit() মেথডের কম্বিনেশন। এটি একই সাথে আর্কবিট্রারি প্রসেসের জন্য রিসোর্স লিমিট গেট এবং সেট করতে পারে। যখন pid ০, তবে এটি কারেন্ট প্রসেসের ওপর কাজ করে।
রিসোর্স লিমিটস সংক্রান্ত কিছু কনস্ট্যান্ট -
| Sr.No. | Constants & Description |
|---|---|
| 1 | RLIM_INFINITY আনলিমিটেড রিসোর্সের জন্য লিমিট |
| 2 | RLIMIT_CORE কারেন্ট প্রসেস দ্বারা তৈরি কোর ফাইলের সর্বোচ্চ আকার। |
| 3 | RLIMIT_CPU একটি প্রসেসরের সর্বোচ্চ প্রসেসর টাইম। যখন লিমিট অতিক্রম হয়, SIGXCCPU সিগন্যাল প্রসেসে পাঠানো হয়। |
| 4 | RLIMIT_DATA প্রসেসরের হিপের সর্বোচ্চ আকার |
| 5 | RLIMIT_STACK কল স্ট্যাকের সর্বোচ্চ আকার। এটি মাল্টিথ্রেডেড প্রসেসের জন্য মেইন থ্রেডের স্ট্যাক ব্যবহার করে। |
| 6 | RLIMIT_NOFILE কারেন্ট প্রসেসের জন্য ওপেন ফাইল ডেসক্রিপ্টরের সর্বোচ্চ সংখ্যা। |
| 7 | RLIMIT_MEMLOCK লক্ড মেমোরির জন্য সর্বোচ্চ অ্যাড্রেস স্পেস |
| 8 | RLIMIT_NICE একটি প্রসেসের নাইস লেভেলের সিলিং |
| 9 | RLIMIT_SWAP সওয়াপ স্পেসের সর্বোচ্চ আকার |
| 10 | RLIMIT_NTPS সিস্টেমে pseuda টার্মিন্যালের সর্বোচ্চ সংখ্যা |
রিসোর্স ইউজেজ
রিসোর্স ইউজেজ সংক্রান্ত মেথড এবং কনস্ট্যান্ট রয়েছে।
resource.getrusage(who) মেথড
এই মেথড কারেন্ট প্রসেস বা এর চাইল্ডরা দ্বারা ব্যবহৃত একটি অবজেক্ট ফেরত দেয়। এটি বিভিন্ন ফিল্ড ফেরত দেয়। রিটার্ন ভ্যালুর ফিল্ড থেকে, আমরা জানতে পারি কীভাবে রিসোর্স ব্যবহৃত হয়েছে।
resource.getpagesize() মেথড
এই মেথড একটি সিস্টেম পেজে বাইটের সংখ্যা ফেরত দেয়। এটি ফিজিক্যাল পেজ সাইজের সাথে একই নাও হতে পারে।
রিসোর্স ইউজেজ সংক্রান্ত কিছু কনস্ট্যান্ট।
| Sr.No. | Constants & Description |
|---|---|
| 1 | RUSAGE_SELF কলিং প্রসেস দ্বারা খরচ করা রিসোর্স রিকোয়েস্ট করতে সাহায্য করে। এটি সব থ্রেডের সমস্ত রিসোর্সের যোগফল। |
| 2 | RUSAGE_CHILDREN চাইল্ড প্রসেস দ্বারা খরচ করা রিসোর্স রিকোয়েস্ট করতে সাহায্য করে। |
| 3 | RUSAGE_BOTH কলিং প্রসেস এবং চাইল্ড প্রসেস উভয়ের 의해 খরচ করা রিসোর্স রিকোয়েস্ট করতে সাহায্য করে। সব সিস্টেমে উপলব্ধ নয়। |
| 4 | RUSAGE_THREAD কারেন্ট থ্রেড দ্বারা রিসোর্স ইউজেজ। সব সিস্টেমে উপলব্ধ নয়। |
উদাহরণ কোড
import resource
res_limits = resource.getrusage(resource.RUSAGE_SELF)
print(res_limits)
print('Page Size: ' + str(resource.getpagesize()))
resource.setrlimit(resource.RLIMIT_CPU, (1, 2))
print('Resouce Limits: ' + str(resource.getrlimit(resource.RLIMIT_CPU)))
for a in range(1000):
for b in range(1000):
for c in range(1000):
pass
আউটপুট
$ python3 example.py resource.struct_rusage(ru_utime=0.035801, ru_stime=0.01074, ru_maxrss=9356, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=1147, ru_majflt=0, ru_nswap=0, ru_inblock=0, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=0, ru_nivcsw=17) Page Size: 4096 Resouce Limits: (1, 2) CPU time limit exceeded (core dumped)