মেমরির ব্যবহার খতিয়ে দেখার প্রয়োজন হলে, মেমরির কোন বিভাগ সবচেয়ে গুরুত্বপূর্ণ তা শনাক্ত করতে হাই-লেভেল অ্যাসেসমেন্ট টুল দিয়ে শুরু করুন।
dumpsys meminfo
কোনও অ্যাপ্লিকেশনের মেমরি ব্যবহার সম্পর্কে ওভারভিউ পাওয়ার সবচেয়ে সাধারণ উপায় হল
dumpsys meminfo। সব মেমরি ম্যাপিং সহ বিস্তারিত ব্রেকডাউন দেখতে,
-a ফ্ল্যাগ অন্তর্ভুক্ত করা প্রায়শই সহায়ক হয়:
adb shell dumpsys meminfo -a <package_name_or_pid>
মেমরির উপর চাপ আছে এমন একটি অ্যাপ্লিকেশনের স্যাম্পেল আউটপুট এখানে দেওয়া হল (SwapPss-এর উচ্চ মান লক্ষ্য করুন):
** MEMINFO in pid 4562 [com.android.memorylab] **
Pss Private Private SwapPss Rss Heap Heap Heap
Total Dirty Clean Dirty Total Size Alloc Free
------ ------ ------ ------ ------ ------ ------ ------
Native Heap 394 268 64 17440 4264 29416 18128 8040
Dalvik Heap 165 8 0 672 8196 40949 32757 8192
Dalvik Other 47 28 0 604 1132
Stack 112 108 4 312 120
...
TOTAL 33197 580 788 21920 167776 70365 50885 16232
App Summary
Pss(KB) Rss(KB)
------ ------
Java Heap: 12 32608
Native Heap: 268 4264
Code: 724 125672
Stack: 108 120
Graphics: 0 0
Private Other: 256
System: 31829
Unknown: 5112
TOTAL PSS: 33197 TOTAL RSS: 167776 TOTAL SWAP PSS: 21920
Objects
Views: 15 ViewRootImpl: 1
AppContexts: 5 Activities: 1
...
ডেটা ব্যাখ্যা করা
- Pss Total: প্রোপোরশনাল সেট সাইজ। এটি হল
Private Dirty-এর যোগফলPrivate Clean+ অন্যান্য প্রসেসের (যেমন Zygote বুট ইমেজ) সাথে শেয়ার করা মেমরির আপনার প্রসেসের ইকুইটেবল শেয়ার। "এই অ্যাপ কতটা মেমরি ব্যবহার করছে" তা জানার জন্য এটিই হল সেরা মেট্রিক।
- প্রাইভেট ডার্টি: এটি হল RAM যা শুধুমাত্র আপনার প্রসেস ব্যবহার করছে এবং পরিবর্তন করা হয়েছে (বা এটি হল পরিচয় গোপন রাখা মেমরি)। লিক খুঁজে পাওয়ার জন্য এটি সবচেয়ে গুরুত্বপূর্ণ সংখ্যা কারণ এই মেমরি ড্রপ করা যাবে না।
- প্রাইভেট ক্লিন: RAM যা শুধুমাত্র আপনার প্রসেস ব্যবহার করছে, কিন্তু স্টোরেজে থাকা ফাইলের একটি অপরিবর্তিত কপি (যেমন DEX ফাইল)। মেমরি কম থাকলে OS এটি ড্রপ করতে পারে।
- SwapPss: মেমরি যা কম্প্রেস করা হয়েছে এবং ZRAM-এ সোয়্যাপ করা হয়েছে। এটি
হতে পারে কারণ সিস্টেম মেমরি কম আছে অথবা Android Runtime ব্যাকগ্রাউন্ড প্রসেস
শনাক্ত করেছে (তাদের অব্যবহৃত বা নিষ্ক্রিয় পৃষ্ঠা ZRAM-এ সরিয়ে নিয়ে যাওয়া)।
dumpsysউদাহরণে, প্রায় সবNative HeapএবংDalvik HeapZRAM-এ সরানো হয়েছে।
- অ্যাপের সারাংশ: বিস্তারিত সারিগুলিকে বোধগম্য বাকেটে একত্রিত করে একটি উচ্চ-স্তরের শ্রেণীকরণ।
- অবজেক্ট: লিক হওয়া
ActivitiesওViewRootImplইনস্ট্যান্স ট্র্যাক করার জন্য উপযোগী। আপনি অ্যাপ থেকে বেরিয়ে এসে GC-কে জোর করলে,Activitiesগণনা ০-তে ফিরে আসা উচিত।
মেমরি বাজেট বিভাগ
Android 18 ও তার পরবর্তী ভার্সনে, dumpsys meminfo একটি অ্যাপ ডাম্প করার সময় মেমরি বাজেট
বিভাগও প্রিন্ট করে। এই বিভাগটি প্রসেস ও সম্পূর্ণ অ্যাপের (প্যাকেজ) memcg
পরিসংখ্যান পড়ে, তাই
আপনাকে নিজে cgroup ফাইল খুঁজতে হয় না। এখানে ফোরগ্রাউন্ডে MemoryLab স্যাম্পেল অ্যাপের
বিভাগ দেখানো হয়েছে, Java
মেমরি (১০এমবি) অ্যালোকেট করুন বিকল্পে তিনবার ট্যাপ করার পরে:
Memory Budget
Process(KB) Package(KB)
----------- -----------
Current Usage: 83820 87976
Limit: none 4718592
Limit Source: none MemoryLimiter
Peak Usage: 85136 89292
Swap Used: 0 0
Usage Breakdown
Anonymous: 81700 81700
File: 96 4200
File Mapped: 16 616
Shared Memory: 16 16
Kernel: 1580 1632
Page Tables: 640 640
Slab: 439 458
Pressure & Reclaim
Throttle Events: 0 0
Refaults (Anon): 0 0
Refaults (File): 0 0
- বর্তমান ব্যবহার: memcg (
memory.current)-এ চার্জ করা মেমরি। এটি মেমরি বাজেটের সীমা। স্যাম্পেলে, তিনটি ১০ এমবি জাভা অ্যালোকেশনের পরে এটি প্রায় ৩৬,৭০০ কেবি বেড়েছে, যা মোট PSS-এর সাথে সামঞ্জস্যপূর্ণ। প্যাকেজের মোট সাইজ প্রসেসের মোট সাইজের চেয়ে বেশি, এমনকি সিঙ্গল-প্রসেস অ্যাপের ক্ষেত্রেও, যখন আগে রান করা ক্যাশে ফাইল পেজ এখনও রিক্লেম করা হয়নি। - সীমা: রিক্লেম থ্রেশহোল্ড (
memory.high) যা বর্তমানে প্রযোজ্য, অথবাnoneযদি কোনওটি না থাকে। স্যাম্পেলে, প্যাকেজের সিস্টেম মেমরি সীমা আছে এবং প্রসেসের নিজস্ব কোনও সীমা নেই। - সীমার সোর্স: সীমা কোথা থেকে আসে।
AndroidManifestহল একটি<memory-budget>যা অ্যাপ ম্যানিফেস্টে ঘোষণা করা হয়েছে,MemoryBudgetManagerহল একটি বাজেট যা অ্যাপ রান টাইমে সেট করেছে,MemoryLimiterহল একটি সিস্টেম মেমরি সীমা এবংam memory-limiterহল একটি ম্যানুয়াল ওভাররাইড যাadb-এর সাথে সেট করা হয়েছে। - সর্বাধিক ব্যবহার: memcg তৈরি হওয়ার পর থেকে সর্বাধিক চার্জ
(
memory.peak)। এটি কার্নেলেN/Aদেখায় যা এটিতে কাজ করে না। - সোয়্যাপের ব্যবহার: ZRAM-এ কম্প্রেস করা মেমরি (
memory.swap.current)। - ব্যবহারের ব্রেকডাউন:
memory.stat-এর প্রধান ফিল্ড, যেমন অ্যানোনিমাস ও ফাইল-ব্যাকড মেমরি। - Pressure & Reclaim: Throttle Events memcg কতবার
তার
memory.highসীমা অতিক্রম করেছে তা গণনা করে। রিফল্ট সেইসব পৃষ্ঠা গণনা করে যেগুলি সোয়্যাপ আউট বা সরিয়ে দেওয়া হয়েছে এবং পরে আবার প্রয়োজন হয়েছে। আপনি অ্যাপ ব্যবহার করার সময় এই সংখ্যাগুলি বেড়ে গেলে, অ্যাপের ওয়ার্কিং সেটের তুলনায় সীমা আরও কঠোর হয়।
-a বা -v ফ্ল্যাগ সহ, এই বিভাগে memory.stat এবং memory.events থেকে প্রতিটি র কাউন্টারও তালিকাভুক্ত করা হয়।
হাতে-কলমে অনুশীলন: meminfo-এর মাধ্যমে দ্রুত ট্রায়াজ
এই অনুশীলনে দেখানো হয়েছে যে বিভিন্ন ধরনের বরাদ্দ কীভাবে meminfo-এ দেখানো হয়।
অ্যাপ লঞ্চ করুন:
adb shell am start -W -n com.android.memorylab/.MainActivityবেসলাইন মেমরি চেক করা:
adb shell dumpsys meminfo -s com.android.memorylab(
-sফ্ল্যাগ মেমরি বিভাগের একটি সংক্ষিপ্ত, সুনির্দিষ্ট সারাংশ প্রদান করে)।Java মেমরি বরাদ্দ করুন: অ্যাপে Java মেমরি বরাদ্দ করুন (১০এমবি) বোতামে ৩ বার ট্যাপ করুন।
পরিবর্তন লক্ষ্য করুন:
meminfo -sআবার রান করুন। আপনি Java Heap ভ্যালু প্রায় ৩০,০০০ কেবি (৩০ এমবি) বৃদ্ধি পেতে দেখবেন।নেটিভ মেমরি বরাদ্দ করুন: নেটিভ মেমরি বরাদ্দ করুন (১ জিবি ইনকম্প্রেসিবল) বোতামে একবার ট্যাপ করুন।
পরিবর্তন লক্ষ্য করুন:
meminfo -sআবার রান করুন। নেটিভ হিপ ভ্যালু এখন অনেক বেশি (~১,০০০,০০০ কেবি) দেখাতে হবে।memcg-এর সাথে তুলনা করুন (Android 18 এবং তার পরবর্তী যেকোনও ভার্সন):
meminfo -sআউটপুটের শেষে মেমরি বাজেট বিভাগটি দেখুন। প্রতিটি অ্যালোকেশনের পরে মোট PSS-এর সাথে বর্তমান ব্যবহার বৃদ্ধি পায়, কারণ Java এবং নেটিভ অ্যালোকেশন, উভয়কেই অ্যাপের memcg-তে চার্জ করা হয়।
গ্লোবাল ভিউ
পুরো সিস্টেম জুড়ে মেমরির ব্যবহার দেখতে, এটি রান করুন:
adb shell dumpsys meminfo
এটি RAM ব্যবহারের একটি সারসংক্ষেপ প্রদান করে, যার মধ্যে মোট RAM, ফ্রি RAM এবং PSS দ্বারা সাজানো প্রসেসের একটি তালিকা অন্তর্ভুক্ত থাকে।
সিস্টেমের মূল মেট্রিক
- ZRAM: RAM-এ কম্প্রেস করা সোয়াপ।
- DMA-BUF: গ্রাফিক্স ও শেয়ার করা মেমরি বাফার। Android-এর আধুনিক ভার্সন UI রেন্ডার করার জন্য
DMA-BUF ব্যাপকভাবে ব্যবহার করে।
DMA-BUF-এর মোট সংখ্যা খুব বেশি হলে,/sys/kernel/debug/dma_buf/bufinfoব্যবহার করে গ্রাফিক্স-ভারী প্রসেসগুলি তদন্ত করুন। - হারানো RAM: কার্নেল বা কোনও প্রসেসের মাধ্যমে যে মেমরি হিসেব করা হয় না (যেমন, হার্ডওয়্যার-সংরক্ষিত অঞ্চল)।
memcg পরিসংখ্যান
প্রতিটি অ্যাপ প্রসেসের নিজস্ব মেমরি কন্ট্রোল গ্রুপ (memcg) থাকে এবং কার্নেল এতে চার্জ করা মেমরির মোট পরিমাণ গণনা করতে থাকে (এই গণনা কীভাবে RSS এবং PSS থেকে আলাদা তা জানতে memcg দেখুন)। এই ফাইলগুলি পড়া সস্তা এবং আপনার অ্যাপে কোনও সমস্যা সৃষ্টি করে না, তাই আপনি ইউজার ফ্লো চালানোর সময় প্রতি সেকেন্ডে সেগুলি স্যাম্পেল করতে পারেন।
/proc/<PID>/cgroup-এর 0:: লাইন থেকে কোনও প্রসেসের memcg পাথ দেখুন
নিজেই পাথ তৈরি করার পরিবর্তে, কারণ cgroup লেআউট ডিভাইস অনুযায়ী
আলাদা হতে পারে। প্রতিটি ডিভাইস কমান্ড adb shell-এ একটি সিঙ্গেল কোট স্ট্রিং হিসেবে পাস করুন
যাতে ডিভাইস শেল কোট দেখতে পায়:
PID=$(adb shell pidof -s <package_name>)
CG=/sys/fs/cgroup$(adb shell "sed -n 's/^0:://p' /proc/$PID/cgroup")
adb shell "cat $CG/memory.current $CG/memory.swap.current"
adb shell "grep -E '^(anon|file|workingset_refault_.*) ' $CG/memory.stat"
গুরুত্বপূর্ণ ফাইলগুলি হল:
memory.current: প্রসেসের জন্য চার্জ করা মেমরি, বাইটে। এটি হল সেই সংখ্যা যা মেমরি বাজেট সীমিত করে।memory.swap.current: ZRAM-এ কম্প্রেস করা মেমরি, বাইটে।memory.stat: চার্জের ব্রেকডাউন, সাইজের জন্য বাইটে।anonহল বেনামী মেমরি, যেমন Java এবং নেটিভ হিপ।fileহল ফাইল-ব্যাকড পেজ ক্যাশে, যেমন কোড এবং রিসোর্স।workingset_refault_anonএবংworkingset_refault_fileসেইসব পৃষ্ঠা গণনা করে যেগুলি সোয়্যাপ আউট বা এভিক্ট করা হয়েছে এবং তারপরে আবার প্রয়োজন হয়েছে। রিফল্ট কাউন্ট বেড়ে যাওয়ার অর্থ হল প্রসেসটির জন্য মেমরি কম পড়ছে।memory.events: মেমরি লিমিট ইভেন্টের সংখ্যা।highগণনা করে যে কতবার প্রসেসটি তারmemory.highসীমা অতিক্রম করার জন্য থ্রটল করা হয়েছে।
প্রসেস memcg-এর পেরেন্ট ডিরেক্টরি সম্পূর্ণ অ্যাপের (এর UID) অন্তর্গত। এর ফাইলের মধ্যে অ্যাপের সব প্রসেস চালানোর মেমরি, সাথে অ্যাপের আগের প্রসেস থেকে ছেড়ে যাওয়া ক্যাশে করা ফাইল পৃষ্ঠা যা বন্ধ হয়ে গেছে এবং এখনও রিক্লেম করা হয়নি:
adb shell "cat $CG/../memory.current"
অনুমতি সংক্রান্ত কোনও সমস্যা হলে, adb root রান করে আবার চেষ্টা করুন। কিছু ডিভাইসে শুধুমাত্র
রুট হিসেবে এইসব ফাইল পড়তে পারবেন।
MemoryLab স্যাম্পেল অ্যাপের মাধ্যমে এইসব ফাইলের গাইডেড ওয়াকথ্রু পেতে, হ্যান্ডস-অন এক্সারসাইজ: memcg এক্সপ্লোর করা দেখুন।
ম্যাপ দেখান
কোনও প্রসেসের মেমরি ম্যাপিংয়ের আরও বিস্তারিত ব্রেকডাউন পেতে,
showmap ব্যবহার করুন। এই টুল /proc/<pid>/smaps থেকে পড়ে।
adb shell showmap <pid>
showmap প্রসেসে প্রতিটি মেমরি ম্যাপ তালিকাভুক্ত করে। যেসব কী ম্যাপিং খুঁজতে হবে
তার মধ্যে এগুলি পড়ে:
[anon:scudo:primary]বা[anon:libc_malloc]: নেটিভ হিপ। Android-এর আধুনিক ভার্সন Scudo অ্যালোকেটর ব্যবহার করে।*.art: Java হিপ ইমেজ (যেমন, বুট ইমেজ)।[anon:dalvik-main space]: প্রধান Java হিপ।*.so: শেয়ার করা লাইব্রেরি।*.{oat,dex,odex,vdex}: কম্পাইল করা DEX কোড।
সবচেয়ে বেশি ব্যক্তিগত মেমরি ব্যবহারকারী খুঁজে পেতে আপনি আউটপুট সাজাতে পারেন:
# Sort by private clean + private dirty memory
adb shell showmap <pid> | awk '{print $6+$7, $0}' | sort -rn | head -n 10
স্যাম্পেল আউটপুট:
virtual shared shared private private Anon Shmem File Shared Private
size RSS PSS clean dirty clean dirty swap swapPSS HugePages PmdMapped PmdMapped Hugetlb Hugetlb Locked # object
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------- --------- --------- -------- -------- -------- ---- ------------------------------
2776 18176 5784 2823 0 3008 308 2468 4700 4700 0 0 0 0 0 0 47 [anon:scudo:primary]
560 952 876 657 316 0 560 0 12 12 0 0 0 0 0 0 8 /data/app/.../base.apk
448 393216 448 448 0 0 0 448 0 0 0 0 0 0 0 0 2 [anon:dalvik-main space]
...
হাতে-কলমে অনুশীলন: showmap-এর সাথে ডিপ ডাইভ
নির্দিষ্ট মেমরি ম্যাপিং কীভাবে শনাক্ত করতে হয় এবং ক্লিন ও ডার্টি মেমরির মধ্যে পার্থক্য কীভাবে করতে হয় তা জানুন।
- Mmap ক্লিন মেমরি: MemoryLab অ্যাপে একবার Mmap ক্লিন অ্যানন মেমরি (১০এমবি) বোতামে ট্যাপ করুন।
প্রসেস আইডি পান: অ্যাপের UI-তে PID দেখা যায়। এছাড়াও, আপনি এই কমান্ডের সাহায্যে এটি খুঁজে পেতে পারেন:
adb shell pidof com.android.memorylabshowmap-এর মাধ্যমে পরীক্ষা করা:
# Replace <PID> with the actual process ID from the previous step adb shell showmap <PID> | grep "memorylab-clean"ম্যাপিং শনাক্ত করা: আপনি একটি বেনামী ম্যাপিং দেখতে পাবেন যার লেবেল হল
[anon:memorylab-clean]এবং ভার্চুয়াল সাইজ হল ঠিক ১০২৪০ কেবি। মনে রাখবেন যে এই ম্যাপের জন্য প্রাইভেট ডার্টি ভ্যালু সম্ভবত ০। এটি "ক্লিন" অ্যানোনিমাস মেমরি কারণ আমরা ভার্চুয়াল স্পেস রিজার্ভ করার জন্যmmapব্যবহার করেছি কিন্তু এখনও এতে কিছু লিখিনি (তাই কোনও ফিজিক্যাল RAM আসলে ব্যবহার করা হয়নি)।নেটিভ হিপ তুলনা:
[anon:scudo:primary]-এর সাথে এটির তুলনা করুন ম্যাপিং যাshowmap-এ দেখা যেত যদি আপনিmeminfoঅনুশীলনের ৫ নম্বর ধাপের পরে এটি রান করতেন। কারণ ১ জিবি নেটিভ অ্যালোকেশন আসলে প্রতিটি পৃষ্ঠায় লেখে, সেই পৃষ্ঠাগুলি "ডার্টি" এবং প্রাইভেট ডার্টি কলামে অনেক বেশি দেখাবে।প্রো-টিপ (বড় অবজেক্ট):
meminfoঅনুশীলন থেকে Java Heap অ্যালোকেশন লক্ষ্য করুন। যেহেতু এগুলি ১০ এমবি বাইট অ্যারে, তাই সম্ভবত এগুলিshowmap-এ[anon:dalvik-free list large object space]হিসেবে দেখা যায়। Android Runtime (ART) ১২ কেবির চেয়ে বড় অবজেক্টকে আলাদা লার্জ অবজেক্ট স্পেসে (LOS) রাখে যাতে মূল হিপে ফ্র্যাগমেন্টেশন এড়ানো যায়।
procstats
meminfo একটি নির্দিষ্ট সময়ের স্ন্যাপশট প্রদান করে, procstats সমস্ত চলমান অ্যাপ্লিকেশনের অবস্থা এবং মেমরি ব্যবহারের পর্যায়ক্রমিক স্যাম্পেলিং করে ঐতিহাসিক ডেটা প্রদান করে। এটি হল দীর্ঘমেয়াদী মেমরি হেলথ মনিটর করার জন্য ব্যবহৃত প্রাথমিক টুল
এবং এটি Android সেটিংসে মেমরির ব্যবহার সংক্রান্ত রিপোর্টিং পরিচালনা করে।
# View stats for the last 3 hours
adb shell dumpsys procstats --hours 3
স্ট্যাটাস সম্পর্কে বোঝা
procstats-এর আউটপুট অনেক বেশি হতে পারে। সবচেয়ে গুরুত্বপূর্ণ অংশ হল প্রতিটি প্রসেস স্টেটমেন্টের পাশে
বন্ধনীতে থাকা মেট্রিক:
Top: 100% (54MB-64MB-67MB / 49MB-58MB-61MB / 110MB-120MB-130MB over 4)
ফর্ম্যাটটি হল: (% time in state) (minPss-avgPss-maxPss / minUss-avgUss-maxUss / minRss-avgRss-maxRss over samples)
- Pss (প্রোপোরশনাল সেট সাইজ): শেয়ার করা মেমরি প্রসেসের মধ্যে সমানুপাতিকভাবে ভাগ করা হয়।
- Uss (ইউনিক সেট সাইজ): শুধুমাত্র এই প্রসেসের মাধ্যমে ব্যবহার করা মেমরি (প্রাইভেট ক্লিন + প্রাইভেট ডার্টি-এর সমতুল্য)।
- Rss (রেসিডেন্ট সেট সাইজ): ব্যবহৃত মোট ফিজিক্যাল মেমরি, যার মধ্যে সব শেয়ার করা পৃষ্ঠা অন্তর্ভুক্ত (বেশি গণনা করার প্রবণতা থাকে)।
এটি কেন গুরুত্বপূর্ণ:
- স্টেবল অ্যাপ: সর্বনিম্ন/গড়/সর্বোচ্চ কাছাকাছি।
- মেমরি লিক: সর্বোচ্চ মান সর্বনিম্ন মানের থেকে অনেক বেশি এবং স্যাম্পলের সংখ্যা বাড়ার সাথে সাথে গড় মান সময়ের সাথে সাথে ধীরে ধীরে বৃদ্ধি পায়।
- স্পাইকি ব্যবহার: সর্বাধিক ব্যবহার গড়ের চেয়ে অনেক বেশি, যা ক্ষণস্থায়ী ভারী অপারেশন (যেমন ইমেজ প্রসেসিং) নির্দেশ করে, যা ভুল সময়ে হলে OOM হতে পারে।
প্রসেসের স্ট্যাটাস
procstats বেশ কয়েকটি রাজ্যের (প্রায়ই সংক্ষিপ্ত আকারে লেখা হয়) অ্যাপ ট্র্যাক করে:
- পারসিস্ট: সিস্টেমের গুরুত্বপূর্ণ প্রসেস যা সবসময় চলতে থাকে।
- টপ: অ্যাপটি বর্তমানে ফোরগ্রাউন্ডে আছে এবং ব্যবহারকারী দেখতে পাচ্ছেন।
- ImpFg (গুরুত্বপূর্ণ ফোরগ্রাউন্ড): গুরুত্বপূর্ণ ব্যাকগ্রাউন্ড প্রসেস (যেমন IME) বা ফোরগ্রাউন্ড পরিষেবা সহ অ্যাপ।
- ImpBg (গুরুত্বপূর্ণ ব্যাকগ্রাউন্ড): ব্যাকগ্রাউন্ড প্রসেস যা সিস্টেমের জন্য গুরুত্বপূর্ণ বলে বিবেচনা করা হয়।
- Fgs / BFgs: ফোরগ্রাউন্ড সার্ভিস বা বাউন্ড ফোরগ্রাউন্ড সার্ভিস।
- Service / ServRst: ব্যাকগ্রাউন্ড পরিষেবা বা বর্তমানে রিস্টার্ট হচ্ছে এমন পরিষেবা।
- Cached / LastAct: দ্রুত রিস্টার্ট করার জন্য ব্যাকগ্রাউন্ডে ক্যাশে করা অ্যাপ। সিস্টেমের পক্ষে এগুলি বন্ধ করা নিরাপদ।
ডিভাইসের মেমরি স্ট্যাটাস ও রান টাইম স্ট্যাটাস
procstats-ও ট্র্যাক করে যে পুরো ডিভাইস মেমরি প্রেসারের মধ্যে
কতটা সময় কাটিয়েছে। রান টাইম পরিসংখ্যান বিভাগটি দেখুন:
Run time Stats:
SOff/Norm: +1h10m15s
SOn/Norm: +15m20s
Low: +2m10s
Crit: +45s
- SOff / SOn: স্ক্রিন বন্ধ বনাম স্ক্রিন চালু।
- Norm / Mod / Low / Crit: মেমরি প্রেসার লেভেল (স্বাভাবিক, মাঝারি, কম, গুরুতর)।
কোনও ডিভাইস কম বা গুরুতর অবস্থায় অনেক সময় কাটালে, সেটি ধীরগতির হয়ে যাবে কারণ কার্নেল আগ্রাসীভাবে মেমরি রিক্লেম করে এবং লো মেমরি কিলার (LMK) ব্যাকগ্রাউন্ড প্রসেস বন্ধ করতে শুরু করে। তারপর আপনি প্যাকেজ-প্রতি পরিসংখ্যান দেখে বুঝতে পারবেন যে ডিভাইস যখন এই ধরনের চাপের মধ্যে থাকে তখন কোন অ্যাপগুলি বিশেষভাবে বেশি মেমরি ব্যবহার করে।