PROC_MEMINFO(5) فایلهای پیکربندی PROC_MEMINFO(5)

/proc/meminfo - گزارش جامع آمار و وضعیت مصرف حافظه سامانه (RAM)

پرونده /proc/meminfo آمار دقیق میزان مصرف، حافظه آزاد، بافرها، کش، صفحات فعال/غیرفعال و سایر معیارهای حافظه اصلی سیستم را نمایش میدهد و ابزارهایی مانند free(1) از آن استفاده میکنند.

این پرونده آمارهای مربوط به مصرف حافظه را در سامانه گزارش می‌دهد. ابزار free(1) از آن برای گزارش مقدار حافظه آزاد و مصرف‌شده (هم حافظه فیزیکی و هم swap) در سامانه، و همچنین حافظه اشتراکی و بافرهای مصرف‌شده توسط هسته استفاده می‌کند. هر خط از این پرونده شامل یک نام پارامتر، یک دونقطه، مقدار پارامتر، و یک واحد اندازه‌گیری اختیاری (مانند "kB") است. فهرست زیر نام پارامترها و مشخص‌کننده فرمت (format specifier) مورد نیاز برای خواندن مقدار فیلد را تشریح می‌کند. به‌جز مواردی که در ادامه قید شده، تمام این فیلدها حداقل از لینوکس 2.6.0 به بعد در دسترس بوده‌اند. برخی از فیلدها فقط در صورتی نمایش داده می‌شوند که هسته با گزینه‌های مشخصی پیکربندی شده باشد؛ این وابستگی‌ها در فهرست ذکر شده‌اند.

کل حافظه فیزیکی (RAM) قابل استفاده (یعنی رم فیزیکی منهای چند بیت رزروشده و کد باینری هسته).
مجموع مقادیر LowFree + HighFree.
تخمینی از مقدار حافظه آزاد و در دسترس برای راه‌اندازی برنامه‌های جدید، بدون نیاز به مبادله به دیسک (swapping).
فضای ذخیره‌سازی نسبتاً موقت برای بلوک‌های خام دیسک که نباید بیش از حد بزرگ شود (حدود ۲۰ مگابایت).
حافظه نهان درون‌رم برای پرونده‌های خوانده‌شده از دیسک (کش صفحات یا page cache). شامل SwapCached نمی‌شود.
حافظه‌ای که زمانی به دیسک منتقل شده بود (swapped out)، دوباره به حافظه بازگردانده شده (swapped in) اما کماکان در پرونده swap نیز باقی مانده است. (در صورت فشار بالای حافظه، نیازی به نوشتن مجدد این صفحات روی دیسک نیست، زیرا پیش‌تر در پرونده swap ذخیره شده‌اند؛ این امر موجب صرفه‌جویی در ورودی/خروجی دیسک می‌شود).
حافظه‌ای که اخیراً بیشتر مورد استفاده قرار گرفته و معمولاً بازپس‌گیری (reclaim) نمی‌شود مگر در شرایطی که کاملاً ضروری باشد.
حافظه‌ای که اخیراً کمتر مورد استفاده بوده است. این حافظه اولویت بیشتری برای بازپس‌گیری به منظور مقاصد دیگر دارد.
صفحات حافظه ناشناس (anonymous) فعال که در حافظه رم قرار دارند و اخیراً مورد استفاده بوده‌اند.
صفحات حافظه ناشناس غیرفعال که کاندیدای انتقال به فضای مبادله (swap) هستند.
صفحات مبتنی بر پرونده (file-backed) فعال در حافظه نهان (کش) که اخیراً استفاده شده‌اند.
صفحات مبتنی بر پرونده غیرفعال در کش که کاندیدای بازپس‌گیری و پاک‌سازی هستند.
صفحات غیرقابل‌تخلیه که در حافظه قفل شده‌اند و امکان بازپس‌گیری آن‌ها وجود ندارد. (از لینوکس 2.6.28 تا 2.6.30 نیازمند CONFIG_UNEVICTABLE_LRU بود).
میزان حافظه‌ای که با فراخوانی‌های سیستمی mlock در رم قفل شده است. (از لینوکس 2.6.28 تا 2.6.30 نیازمند CONFIG_UNEVICTABLE_LRU بود).
(با شروع از لینوکس 2.6.19، نیازمند CONFIG_HIGHMEM است.) مقدار کل حافظه بالا (Highmem). حافظه Highmem به تمام حافظه‌های فیزیکی بالاتر از حدود ۸۶۰ مگابایت در معماری‌های ۳۲ بیتی گفته می‌شود. نواحی Highmem برای برنامه‌های فضای کاربری یا برای کش صفحات استفاده می‌شوند. هسته برای دسترسی به این حافظه باید از روش‌های خاص نگاشت استفاده کند که دسترسی به آن را نسبت به Lowmem کندتر می‌کند.
(با شروع از لینوکس 2.6.19، نیازمند CONFIG_HIGHMEM است.) مقدار حافظه بالای آزاد.
(با شروع از لینوکس 2.6.19، نیازمند CONFIG_HIGHMEM است.) مقدار کل حافظه پایین (Lowmem). حافظه Lowmem حافظه‌ای است که برای تمام اهداف Highmem قابل استفاده است، اما علاوه بر آن در دسترس هسته برای ساختارهای داده‌ای خودش نیز قرار دارد. در میان موارد دیگر، تمامی تخصیص‌های مربوط به Slab از این فضا انجام می‌شود. تمام شدن حافظه Lowmem موجب بروز مشکلات اساسی در سامانه می‌شود.
(با شروع از لینوکس 2.6.19، نیازمند CONFIG_HIGHMEM است.) مقدار حافظه پایین آزاد.
(CONFIG_MMU مورد نیاز است.) حافظه کپی‌شده برای نگاشت‌های mmap در سامانه‌های فاقد واحد مدیریت حافظه (MMU).
کل فضای مبادله (Swap) در دسترس سامانه.
مقدار فضای مبادله که در حال حاضر استفاده نشده و آزاد است.
حافظه‌ای که در صف انتظار برای بازنویسی و ذخیره بر روی دیسک قرار دارد.
حافظه‌ای که در حال حاضر فعالانه در حال بازنویسی بر روی دیسک است.
صفحات بدون پشتوانه پرونده (ناشناس) که در جدول صفحات فضای کاربری نگاشت شده‌اند.
پرونده‌هایی که با فراخوانی mmap(2) در حافظه نگاشت شده‌اند، مانند کتابخانه‌ها.
مقدار حافظه مصرف‌شده در سامانه‌های پرونده‌ای tmpfs(5).
تخصیص‌های درون هسته که هسته در شرایط فشار کمبود حافظه برای آزادسازی آن‌ها تلاش می‌کند. شامل SReclaimable (در ادامه)، و دیگر تخصیص‌های مستقیم دارای shrinker است.
حافظه نهان ساختارهای داده‌ای درون هسته. (به slabinfo(5) مراجعه کنید).
بخشی از Slab که امکان آزادسازی و بازپس‌گیری آن وجود دارد، مانند حافظه نهان ساختارها (dentries و inodes).
بخشی از Slab که تحت فشار حافظه نیز قابل بازپس‌گیری نیست.
مقدار حافظه اختصاص‌یافته به پشته‌های فرایندهای هسته (Kernel Stacks).
مقدار حافظه اختصاص‌یافته به پایین‌ترین لایه از جداول صفحات (Page Tables).
(CONFIG_QUICKLIST مورد نیاز است.) لیست‌های سریع برای تسریع فرایند تخصیص جداول صفحات.
صفحات مربوط به پروتکل NFS که به سرور ارسال شده‌اند اما هنوز در حافظه ذخیره‌سازی دائمی تثبیت نشده‌اند.
حافظه استفاده‌شده برای بافرهای جهشی (bounce buffers) دستگاه‌های بلوکی.
حافظه استفاده‌شده توسط FUSE برای بافرهای بازنویسی موقت.
کل مقدار حافظه‌ای که در حال حاضر امکان تخصیص آن در سامانه وجود دارد، به کیلوبایت. این محدودیت تنها در صورتی اعمال می‌شود که حسابداری سخت‌گیرانه overcommit فعال باشد (حالت ۲ در /proc/sys/vm/overcommit_memory). این حد مطابق فرمول شرح‌داده‌شده در /proc/sys/vm/overcommit_memory محاسبه می‌شود. برای جزئیات بیشتر، پرونده مستندات هسته Documentation/vm/overcommit-accounting.rst را مشاهده کنید.
مقدار حافظه‌ای که هم‌اکنون در سامانه تخصیص داده شده است. حافظه متعهدشده (Committed memory) مجموع تمام حافظه‌ای است که توسط فرایندها تخصیص یافته، حتی اگر تا این لحظه واقعاً مورد "استفاده" قرار نگرفته باشد. فرایندی که ۱ گیگابایت حافظه تخصیص می‌دهد (با استفاده از malloc(3) یا توابع مشابه)، اما تنها ۳۰۰ مگابایت از آن را لمس کرده است، مصرف حافظه آن ۳۰۰ مگابایت نمایش داده می‌شود، حتی اگر کل ۱ گیگابایت فضای آدرس برای آن اختصاص یافته باشد.
این ۱ گیگابایت حافظه‌ای است که توسط VM به فرایند "تعهد" داده شده و در هر زمان می‌تواند توسط برنامه تخصیص‌دهنده استفاده شود. اگر سیاست سخت‌گیرانه overcommit روی سامانه فعال باشد (حالت ۲ در /proc/sys/vm/overcommit_memory)، تخصیص‌هایی که از CommitLimit فراتر بروند مجاز نخواهند بود. این سازوکار زمانی مفید است که بخواهید تضمین کنید پس از تخصیص موفق حافظه، فرایندها هرگز به دلیل کمبود حافظه دچار شکست و فروپاشی نشوند.
اندازه کل ناحیه حافظه vmalloc.
مقدار مصرف‌شده از ناحیه vmalloc. از لینوکس 4.4 به بعد، این فیلد دیگر محاسبه نمی‌شود و مقدار آن به صورت ثابت 0 بازگردانده می‌شود. به /proc/vmallocinfo مراجعه کنید.
بزرگ‌ترین بلوک پیوسته آزاد در ناحیه vmalloc. از لینوکس 4.4 به بعد، این فیلد دیگر محاسبه نمی‌شود و مقدار آن به صورت ثابت 0 بازگردانده می‌شود. به /proc/vmallocinfo مراجعه کنید.
(CONFIG_MEMORY_FAILURE مورد نیاز است.) میزان حافظه فیزیکی خرابی که دارای خطای سخت‌افزاری بوده و توسط هسته شناسایی و کنار گذاشته شده است.
مقدار حافظه علامت‌گذاری‌شده توسط madvise(2) با گزینه MADV_FREE را نمایش می‌دهد.
(CONFIG_TRANSPARENT_HUGEPAGE مورد نیاز است.) صفحات عظیم ناشناس (فاقد پشتیبانی پرونده) نگاشت‌شده در جدول صفحات فضای کاربری.
(CONFIG_TRANSPARENT_HUGEPAGE مورد نیاز است.) حافظه استفاده‌شده توسط حافظه اشتراکی (shmem) و tmpfs(5) تخصیص‌یافته با صفحات عظیم.
(CONFIG_TRANSPARENT_HUGEPAGE مورد نیاز است.) حافظه اشتراکی نگاشت‌شده در فضای کاربری با صفحات عظیم.
کل صفحات تخصیص‌دهنده حافظه پیوسته (CMA). (CONFIG_CMA مورد نیاز است.)
صفحات آزاد تخصیص‌دهنده حافظه پیوسته (CMA). (CONFIG_CMA مورد نیاز است.)
(CONFIG_HUGETLB_PAGE مورد نیاز است.) اندازه استخر (pool) صفحات عظیم.
(CONFIG_HUGETLB_PAGE مورد نیاز است.) تعداد صفحات عظیم در استخر که هنوز تخصیص نیافته‌اند.
(CONFIG_HUGETLB_PAGE مورد نیاز است.) تعداد صفحات عظیمی که تعهد تخصیص آن‌ها از استخر صادر شده، اما هنوز تخصیص واقعی صورت نگرفته است. این صفحات رزروشده تضمین می‌کنند که برنامه در هنگام وقوع نقص صفحه (fault time) بتواند صفحه عظیم را از استخر دریافت نماید.
(CONFIG_HUGETLB_PAGE مورد نیاز است.) تعداد صفحات عظیم مازاد موجود در استخر فراتر از مقدار قیدشده در /proc/sys/vm/nr_hugepages. حداکثر تعداد صفحات عظیم مازاد توسط /proc/sys/vm/nr_overcommit_hugepages کنترل می‌شود.
(CONFIG_HUGETLB_PAGE مورد نیاز است.) اندازه هر صفحه عظیم (Huge Page).
تعداد بایت‌های حافظه رم که توسط هسته به صورت خطی در قالب صفحات ۴ کیلوبایتی نگاشت شده‌اند. (معماری x86).
تعداد بایت‌های حافظه رم که توسط هسته به صورت خطی در قالب صفحات ۴ مگابایتی نگاشت شده‌اند. (در x86 با فعال بودن CONFIG_X86_64 یا CONFIG_X86_PAE).
تعداد بایت‌های حافظه رم که توسط هسته به صورت خطی در قالب صفحات ۲ مگابایتی نگاشت شده‌اند. (در x86 در صورتی که هیچ‌یک از CONFIG_X86_64 یا CONFIG_X86_PAE فعال نباشند).
(در x86 با فعال بودن CONFIG_X86_64 و CONFIG_X86_DIRECT_GBPAGES).

proc(5)

مه ۲۰۲۵ man-pages