কম মেমরি কিলার

Android লো মেমরি কিলার (LMK) ডেমন চলমান Android সিস্টেমের মেমরির অবস্থা মনিটর করে এবং সবচেয়ে কম প্রয়োজনীয় প্রসেস বন্ধ করে দিয়ে মেমরির উপর অত্যধিক চাপ কমানোর চেষ্টা করে। Android Vitals, Google Play Console-এ ব্যবহারকারীর দ্বারা অনুভূত LMK টার্মিনেশন ট্র্যাক করে এবং রিপোর্ট করে যাতে আপনি ব্যবহারকারীদের প্রভাবিত করে এমন মেমরি প্রেসার সংক্রান্ত সমস্যা শনাক্ত করতে পারেন।

Android Vitals-এ LMK মেট্রিক

Android Vitals আপনার অ্যাপের LMK রেট মনিটর ও উন্নত করতে সাহায্য করতে পারে। Android vitals শুধুমাত্র একটি LMK রেট পরিমাপ করে: ব্যবহারকারীর-লক্ষ্য করা LMK রেট।

এই মেট্রিক আপনার দৈনিক অ্যাক্টিভ ব্যবহারকারীদের শতকরা হার দেখায় যারা অন্তত একবার ব্যবহারকারীর-অনুভূত LMK-এর অভিজ্ঞতা পেয়েছেন। ব্যবহারকারীর-লক্ষ্য করা LMK হল এমন LMK যা ব্যবহারকারী লক্ষ্য করেছেন বলে মনে করা হয়। যেমন, আপনার অ্যাপ কোনও অ্যাক্টিভিটি দেখানোর সময় বা ফোরগ্রাউন্ড সার্ভিস হিসেবে চলার সময় যেসব LMK হয় সেগুলি এর মধ্যে অন্তর্ভুক্ত। এইসব টার্মিনেশনের ফলে অবিলম্বে, নন-গ্রেসফুল প্রসেস এক্সিট হয়। ব্যবহারকারীর কাছে মনে হয় যে অ্যাপ ক্র্যাশ করেছে, প্রায়শই স্ট্যান্ডার্ড লাইফসাইকেল স্টেট-সেভিং মেকানিজম বাইপাস করে এবং এর ফলে ব্যবহারকারীর প্রোগ্রেস হারিয়ে যায়।

Android Vitals এই প্রসেস বন্ধ করার উপর ফোকাস করে কারণ এটি মেমরি ম্যানেজমেন্ট সংক্রান্ত সমস্যার জন্য হাই-ফিডেলিটি প্রক্সি হিসেবে কাজ করে। LMK রেট ১%-এর বেশি হলে বুঝতে হবে যে অবিলম্বে ব্যবস্থা নেওয়া প্রয়োজন। তবে, LMK রেট কম হওয়ার অর্থ এই নয় যে অ্যাপের মেমরির ব্যবহার ঠিক আছে। এই কম রেটের অর্থ হতে পারে যে LMK ডেমন ব্যাকগ্রাউন্ডে চলা প্রসেসগুলি ঘন ঘন বন্ধ করে দিচ্ছে, যার ফলে "ওয়ার্ম স্টার্ট" পারফর্ম্যান্স এবং মাল্টিটাস্কিং ফ্লুইডিটি কমে যায়।

Android Vitals-এর স্টেবিলিটি বিভাগে আপনি মেট্রিক দেখতে পাবেন:

ছবি ১. Android Vitals-এ ব্যবহারকারীর-লক্ষ্য করা LMK রেট অ্যাক্সেস করুন।

ANR ও ক্র্যাশের মতো একই ধরনের গুরুত্বপূর্ণ ডেটা মেট্রিকের মতো, আপনি মেট্রিক ফিল্টার করতে, আপনার সমকক্ষদের সাথে আপনার মেট্রিক তুলনা করতে বা দীর্ঘ সময় ধরে (৩ বছর পর্যন্ত) মেট্রিকের পরিবর্তন মনিটর করতে পারবেন। ২৮ জানুয়ারি ২০২৫ থেকে শুরু করে আগে থেকে থাকা অ্যাপের জন্য ডেটা উপলভ্য।

ছবি ২. Android Vitals-এ LMK রেটের ওভারভিউ।

লো মেমরি কিলার ডেমন কীভাবে কাজ করে

Android প্ল্যাটফর্ম এই ধারণার উপর ভিত্তি করে চলে যে ফ্রি মেমরি হল নষ্ট হওয়া মেমরি। Android সবসময় উপলভ্য সব মেমরি ব্যবহার করার চেষ্টা করে। যেমন, সিস্টেম অ্যাপ বন্ধ করার পরেও মেমরিতে রাখে যাতে ব্যবহারকারী দ্রুত সেগুলিতে ফিরে যেতে পারেন। এই কারণে, Android ডিভাইস প্রায়ই খুব কম ফ্রি মেমরি নিয়ে রান করে (প্রসেসের মধ্যে মেমরি অ্যালোকেশন দেখুন)।

ফ্রি মেমরি কমে গেলে কোন প্রসেস বন্ধ করতে হবে তা নির্ধারণ করতে, লো মেমরি কিলার (LMK) ডেমন আউট অফ মেমরি স্কোর ব্যবহার করে, যাকে oom_adj_score বলা হয়, যাতে চলমান প্রসেসগুলিকে অগ্রাধিকার দেওয়া যায়। উচ্চ স্কোর সহ প্রসেসগুলি প্রথমে বন্ধ করা হয়। ব্যাকগ্রাউন্ড অ্যাপ প্রথমে বন্ধ করা হয়; সিস্টেম প্রসেস, শেষে। নিম্নলিখিত সারণীতে LMK স্কোরিং বিভাগগুলি বেশি থেকে কম অনুযায়ী তালিকাভুক্ত করা হয়েছে। সবচেয়ে বেশি স্কোর করা বিভাগের আইটেম, প্রথম সারিতে, প্রথমে কিল করা হয়:

Android প্রসেসকে সর্বোচ্চ থেকে সর্বনিম্ন স্কোর অনুযায়ী র‍্যাঙ্ক করা হয়েছে: ব্যাকগ্রাউন্ড অ্যাপ, আগের অ্যাপ, হোম অ্যাপ,
             পরিষেবা, লক্ষণীয় অ্যাপ, ফোরগ্রাউন্ড অ্যাপ, পারসিস্টেন্ট, সিস্টেম ও নেটিভ।
ছবি ৩. Android প্রসেস, যেখানে বেশি স্কোর উপরে এবং কম স্কোর নিচে থাকে।

মেমরি প্রোফাইলিং টুল

নিম্নলিখিত টুলগুলি আপনাকে নিম্নলিখিত উপায়ে মেমরি সংক্রান্ত সমস্যা খুঁজে পেতে এবং ডায়াগনসিস করতে সাহায্য করতে পারে:

  • সময়ের সাথে সাথে আপনার অ্যাপ কীভাবে মেমরি বরাদ্দ করে তা দেখুন। আপনার অ্যাপ কতটা মেমরি ব্যবহার করছে, অ্যালোকেট করা জাভা অবজেক্টের সংখ্যা এবং কখন গার্বেজ কালেকশন হয়, তার রিয়েল-টাইম গ্রাফ আপনি দেখতে পাবেন।
  • আপনার অ্যাপ চলাকালীন গার্বেজ কালেকশন ইভেন্ট শুরু করুন এবং জাভা হিপের স্ন্যাপশট নিন।
  • আপনার অ্যাপের মেমরি অ্যালোকেশন রেকর্ড করুন, সব অ্যালোকেট করা অবজেক্ট পরীক্ষা করুন এবং প্রতিটি অ্যালোকেশনের জন্য স্ট্যাক ট্রেস দেখুন।

আপনার গেম নেটিভ ইঞ্জিনে চললে, নেটিভ মেমরি অ্যালোকেশন ডিবাগ করতে HWAddress স্যানিটাইজার ব্যবহার করুন।

Android Studio মেমরি প্রোফাইলার

Android Studio-তে Android Profiler-এর একটি কম্পোনেন্ট হিসেবে মেমরি প্রোফাইলার থাকে যা আপনাকে মেমরি লিক ও মেমরির ব্যবহার বন্ধ করা শনাক্ত করতে সাহায্য করে। এর ফলে স্টাটার, ফ্রিজ ও এমনকি অ্যাপ ক্র্যাশও হতে পারে। প্রোফাইলার আপনার অ্যাপের মেমরি ব্যবহারের রিয়েল-টাইম গ্রাফ দেখায় এবং আপনাকে হিপ ডাম্প ক্যাপচার করতে, জোরপূর্বক গার্বেজ কালেকশন করতে এবং মেমরি অ্যালোকেশন ট্র্যাক করতে দেয়।

Android Studio মেমরি প্রোফাইলার হিপে গ্লোবাল JNI রেফারেন্স দেখাচ্ছে।
ছবি ৪. Android Studio মেমরি প্রোফাইলারে গ্লোবাল JNI রেফারেন্স দেখা।

Unity মেমরি প্রোফাইলিং টুল

আপনি অ্যাপ তৈরি করার জন্য Unity Engine ব্যবহার করলে, Unity মেমরি প্রোফাইলিং সংক্রান্ত নির্দেশিকা অনুসরণ করতে পারেন। Unity-তে আপনার অ্যাপ্লিকেশনে মেমরির ব্যবহার বিশ্লেষণ করার জন্য Unity দুটি টুল অফার করে।

প্রথমটি হল মেমরি প্রোফাইলার মডিউল, যা একটি বিল্ট-ইন প্রোফাইলার যা আপনার অ্যাপ্লিকেশন কোথায় মেমরি ব্যবহার করে সে সম্পর্কে আপনাকে প্রাথমিক তথ্য দেয়।

মেমরি মডিউল টেক্সচার মেমরি এবং মেশ মেমরির মতো মেমরি অ্যালোকেশন দেখায়।
ছবি ৫. মেমরি মডিউল বেছে নেওয়া সহ Unity Profiler উইন্ডো।

দ্বিতীয় টুলটি হল মেমরি প্রোফাইলার প্যাকেজ, এটি একটি Unity প্যাকেজ যা আপনি নিজের প্রোজেক্টে যোগ করতে পারবেন। প্যাকেজটি ইউনিটি এডিটরে একটি অতিরিক্ত মেমরি প্রোফাইলার উইন্ডো যোগ করে। মেমরি প্রোফাইলার আপনাকে আরও বিস্তারিতভাবে আপনার অ্যাপ্লিকেশনে মেমরির ব্যবহার বিশ্লেষণ করতে দেয়। মেমরি লিক খুঁজে পেতে আপনি স্ন্যাপশট স্টোর ও তুলনা করতে পারেন অথবা মেমরি ফ্র্যাগমেন্টেশন সংক্রান্ত সমস্যা খুঁজে পেতে মেমরি লেআউট দেখতে পারেন।

Unity মেমরি প্রোফাইলার উইন্ডো মেমরি স্ন্যাপশটের ব্রেকডাউন দেখাচ্ছে।
ছবি ৬. মেমরি প্রোফাইলার উইন্ডো ব্যবহার করে মেমরি স্ন্যাপশট বিশ্লেষণ করা।

Android-নির্দিষ্ট Unity ওয়ার্কফ্লোর জন্য, Unity টুলের সাহায্যে মেমরির ব্যবহার চেক করুন, Unity-তে মেমরির ব্যবহার অপ্টিমাইজ করুন এবং Unity গেমের জন্য LMK ডিবাগ করুন দেখুন।

Unreal Memory Insights

Unreal Engine-এর তৈরি করা অ্যাপ Unreal Memory Insights ব্যবহার করে মেমরি অ্যালোকেশন ও ডিঅ্যালোকেশন সম্পর্কে বিস্তারিত তথ্য দেখতে পারে, যার মধ্যে লো লেভেল মেমরি (LLM) ট্যাগ ও মেমরি ব্লকের সাথে যুক্ত কলস্ট্যাক অন্তর্ভুক্ত।

মেমরি ইনসাইট কোয়েরি সিস্টেম যেকোনও সময়ে লাইভ অ্যালোকেশন খুঁজে পেতে, মেমরির ব্যবহারে পরিবর্তন শনাক্ত করতে, মেমরি লিক খুঁজে পেতে এবং স্বল্প-মেয়াদী থেকে দীর্ঘ-মেয়াদী অ্যালোকেশন আলাদা করতে পারে।

UE 5.4 থেকে, Android প্রোজেক্টের জন্য কলস্ট্যাক সহ মেমরি ট্রেসিংকে মেমরি ইনসাইট সাপোর্ট করে।

মেমরি ইনসাইট ট্র্যাকার প্রধান মেমরি গ্রাফ, লাইভ অ্যালোকেশন কাউন্ট এবং অ্যালোকেশন/ফ্রি ইভেন্ট কাউন্ট দেখায়।
ছবি ৭. Unreal-এর মেমরি ইনসাইট ট্র্যাকার।

Android-নির্দিষ্ট Unreal ওয়ার্কফ্লোর জন্য, Unreal-এর মাধ্যমে মেমরির ব্যবহার চেক করুন এবং Unreal-এ মেমরির ব্যবহার অপ্টিমাইজ করুন দেখুন।

কম মেমরি সংক্রান্ত ইনসাইট

Android কলব্যাক ও API প্রদান করে যা আপনার গেমের মেমরির ব্যবহার কমাতে এবং আগের গেম রান কেন বন্ধ করা হয়েছিল তা নির্ধারণ করতে সাহায্য করে।

কলব্যাক

বন্ধ হয়ে যাওয়া trim কলব্যাকের জন্য রেজিস্টার করবেন না। সিস্টেম মেমরি রিক্লেম করার আগে নেটিভ মেমরি প্রেসার ইভেন্ট শনাক্ত করার জন্য Android কোনও API প্রদান করে না এবং ফাইন-গ্রেনড রানিং-মেমরি ট্রিম কলব্যাক (TRIM_MEMORY_RUNNING_*) কম মেমরির কারণে কিল হওয়া প্রতিরোধ করার ক্ষেত্রে কার্যকর হয়নি। ফলস্বরূপ, Android TRIM_MEMORY_UI_HIDDEN এবং TRIM_MEMORY_BACKGROUND ছাড়া সব ট্রিম লেভেল বাতিল করেছে। আপনার গেম ব্যাকগ্রাউন্ডে চলে গেলে UI এবং সহায়ক রিসোর্স রিলিজ করতে এইসব বাকি কলব্যাক—অথবা ইঞ্জিন লাইফসাইকেলের সমতুল্য যেমন Unity-এর OnApplicationPause এবং Unreal-এর ApplicationWillEnterBackgroundDelegate—ব্যবহার করুন। প্রয়োগ করার বিবরণ সম্পর্কে জানতে, গেমে মেমরি কমান দেখুন।

গেম বন্ধ করা

Android, অ্যাপ ও গেম ক্যাশে করার জন্য উপলভ্য সব মেমরি ব্যবহার করার চেষ্টা করে যাতে সেগুলি দ্রুত লোড হয় (ব্যবহারকারীর অভিজ্ঞতা উন্নত করে), কিন্তু মেমরি সীমিত হয়ে গেলে, সিস্টেম সবচেয়ে বেশি মেমরি ব্যবহার করা অ্যাপ ও গেম বন্ধ করে দেয় যাতে ডিভাইসের স্বাভাবিক অপারেশনের জন্য মেমরি খালি করা যায়।

গেমের মেমরি ব্যবহার আরও উন্নত করতে আপনাকে সাহায্য করার জন্য তথ্য, ইনসাইট এবং পেশাদার পদ্ধতি নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত করে:

  • ApplicationExitInfo ব্যবহার করুন: এই API, আগের গেম রান কেন Android সিস্টেম বন্ধ করে দিয়েছে তার কারণ জানায়। আগের প্রসেস বন্ধ হওয়ার কারণ হিসেবে কম মেমরি (REASON_LOW_MEMORY) বা মেমরি লিমিটার টার্মিনেশন (REASON_MEMORY_LIMITER) চেক করতে ApplicationExitInfo ব্যবহার করুন (গেমের জন্য ApplicationExitInfo দেখুন)। মেমরি প্রেসারের কারণে গেমটি বন্ধ হয়ে গেছে কিনা তা চেক করুন, যাতে সেই ডিভাইসে কম মেমরি ব্যবহার করার জন্য গেমটি অপ্টিমাইজ করা যায়।
  • মোট ফিজিক্যাল RAM দেখুন: ফোরগ্রাউন্ডে থাকার সময় গেম বন্ধ হয়ে যাওয়া আটকাতে এবং ডিভাইসের ক্ষমতার সাথে ম্যাচ করতে, ডিভাইসের মোট ফিজিক্যাল RAM দেখুন যাতে সেই অনুযায়ী গেমের মেমরি ব্যবহার অ্যাডজাস্ট করা যায়। ব্যাকগ্রাউন্ডে যাওয়ার (প্লেয়ারকে মাল্টিটাস্ক করার অনুমতি দিতে) কিছুক্ষণ পরেই অ্যাপ বন্ধ হওয়া আটকানোই যদি লক্ষ্য হয়, তাহলে আপনার গেমের মেমরি ব্যবহার কমাতে ট্রিম কলব্যাক (বিশেষ করে TRIM_MEMORY_UI_HIDDEN) ব্যবহার করুন।

অতিরিক্ত রিসোর্স