وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

آشنایی و درک مصرف RAM در لینوکس/یونیکس

2 ۱۹۲
زمان لازم برای مطالعه: 6 دقیقه

در این مقاله موضوع مصرف RAM بصورت کلی حافظه های سریع در دسترس  لینوکس یا یونیکس را مورد بررسی قرار خواهیم داد . به تعدادی دستوارت پایه که وضعیت مصرف حافظه را گزارش میدهند نگاهی خواهیم داشت ، اولین دستوری که به ذهن شما هم می رسد احتمالا free خواهد بود :

دستور free برای بررسی مقدار RAM در لینوکس

دستور free به شما درباره مقدار حافظه مصرف نشده و مصرف شده و همجنین مقدار فضای swap اطلاعاتی خواهد داد ، حافظه فیزیکی فضای تصادفی و موقتی ذخیره است که توسط ماژولهای RAM متصل به مادربرد ( یا در سرور مجازی مقدار تخصیص داده شده از حافظه سرور اصلی ) است ، swap هم یک بخش از دیسک ( هارد دیسک یا SSD یا NVMe ) است که بصورت  فضای اضافه برای فضای حافظه فیزیکی مورد استفاده قرار می گیرد.

اولین خط دستور free نمایش دهنده عناوین ستون های اطلاعات است ، خط دوم که با MEM برچسب گزاری شده است ، اطلاعات مقد حافظه فیزیکی مورد استفاده را نمایش می‏‎دهد. گزینه -m در زمان اجرای دستور free اطلاعات را بر اساس MB بجای نمایش پیشفرض KBبر اساس نمایش خواهد داد

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2026       1922        103          0        491       1109

با نگاهی به اطلاعات فوق مشاهده می کنید که روی این سیستم حدود 2GB RAM در دسترس است که تقریبا نزدیک 95% آن مصرف شده است ، اگر به بخش مربوط به swap هم نگاه کنیم می‎بینیم که فضای swap تقریبا دو برابر مقدار RAM می باشد (سیستم دارای 4GB فضای SWAP است ) که در نتیجه یک قاعده عمومی اما قدیمی است که میگوید مقدار swap باید دوبرابر مقدار RAM باشد که البته با افزایش مقدار RAM سیستم ها ابتدا به نیمی از مقدار RAM تغییر کرد و امروزه هم ما پیشنهاد می کنیم برای دستیابی به سرعت بیشتر و جلوگیری از درگیر شدن IO دیسک کلا از swap استفاده نشده و مقدار RAM مورد نیاز بر اساس نیاز واقعی انتخاب شود

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2026       1922        103          0        491       1109
-/+ buffers/cache:        322       1703
Swap:         4094          0       4094

بررسی مصرف واقعی رم در لینوکس با درک -/+ buffers/cache

بین خطوط Mem: و Swap: خطی را میبینیم که با -/+ buffers/cache برچسب گذاری شده است ، این بخش احتمالا فنی ترین بخش برای درک خروجی دستور free آست ، این بخش نشان میدهد که چه مقدار حافظه فیزیکی توسط بافرکش (buffer cahce) مورد استفاده قرار گرفته است ، به بیان دیگر نشان میدهد که چه مقدار حافظه برای کش کردن دیسک در حال استفاده است ( فرض کنید قرض گرفته شده است ) و فراموش نکنید که دیسک کشینگ را دوست داشته باشید ! جون باعث می شود سیستم شما به مراتب سریعتر کار کند.

بنابراین در نگاه اول به نظر می رسد که سیستم مقدار کافی حافظه در دسترس ندارد اما در واقع به شکل مناسب از Memory که برای چیز دیگر مورد نیاز نیست استفاده می کند، عدد کلیدی که در خروجی بالا باید به آن نگاه کنیم 1703 است ، این مقدار عددی است که در صورتی که برنامه های شما به آن نیاز داشته باشند در اختیار آنها قرار خواهد گرفت

پیشنهاد می‎کنیم بخوانید:
چگونه: مشاهده کارت‎های شبکه در لینوکس

با اضافه کردن آپشن -t به دستور free به یک خط total که نمایش دهنده مجموع مقادیر است به شما خواهد داد که اگر دقت کنید خواهید دید که مقادیر -/+ buffers/cache در آن در نظر گرفته نشده است ،

$ free -tm
             total       used       free     shared    buffers     cached
Mem:          2026       1922        103          0        491       1109
-/+ buffers/cache:        322       1704
Swap:         4094          0       4094
Total:        6121       1922       4198

مشاهده دائمی وضعیت مصرف رم در سرور لینوکس

اگر سیستم شما خیلی مشغول باشد و بخواهید ببنید که مقدار حافظه در شرایط مختلف چطور تغییر می‎کند می‎توانید دستور free را با آپشن -s 5 استفاده کنید ،
این آپشن به دستور شما می گوید که هر X ثانیه ( در اینجا هر 5 ثانیه ) مقدار total را به شما نمایش بدهد

:-) free -ms 10
             total       used       free     shared    buffers     cached
Mem:          2026       1922        103          0        491       1109
-/+ buffers/cache:        322       1704
Swap:         4094          0       4094

             total       used       free     shared    buffers     cached
Mem:          2026       1922        103          0        491       1109
-/+ buffers/cache:        321       1704
Swap:         4094          0       4094

             total       used       free     shared    buffers     cached
Mem:          2026       1922        103          0        491       1109
-/+ buffers/cache:        321       1704
Swap:         4094          0       4094

             total       used       free     shared    buffers     cached
Mem:          2026       1922        104          0        491       1109
-/+ buffers/cache:        321       1704
Swap:         4094          0       4094

شما باید با دستور ctrl+c (^C) به این حلقه پایان بدهید ، یک روش دیگر هم استفاده از watch است ، دستور زیر به شما یک خروجی آپدیت هر دو ثانیه یکبار خواهد داد

:-) watch free
Every 2.0s: free                                        Sun Jun 10 10:54:55 2012

             total       used       free     shared    buffers     cached
Mem:       2074952    1966704     108248          0     486960    1156036
-/+ buffers/cache:     323708    1751244
Swap:      4192956        128    4192828

شما میتوانید مدت زمان watch را با دادن آپشن -n 10 به 10 تغییر بدهید ، که 10 میتواند هر عددی بر مبنای ثانیه باشد.

دستور top برای بررسی مقدار RAM در لینوکس

دستور دیگری که می‎تواند اطلاعاتی از مقدار حافظه از اینکه مموری در سیستم لینوکسی شما چطور در حال استفاده شده است top است ، در حالی که top دستور پیش فرض و مورد علاقه همه زمان های من است ، اما برای دریافت اطلاعات کارایی سیستم باید قدری روی خروجی آن تغییرات اعمال کنیم.
با دو عدد Mem: و Swap : شروع می کنیم که مقادیری از کل RAM و فضای سواپ مورد استفاده است و باید مطابق خروجی دستور free باشد را نشان دهد . همین موضوع در خصوص مقادیر free و used  هم صادق است ، البته خروجی top در خصوص buffer / cached قدری گیج گننده است.
دقت کنید که که اگر چه این اعداد در دستور free در خط جداگانه بودند اما در خروجی top آنها در دو خط mem و swap نمایش داده می شوند ، اما در واقع اینها دو آمار عددید مربوط به RAM یا همان Memory واقعی سیستم هستند و ارتباطی به swap ندارند.

:-) top
top - 18:54:11 up 38 days, 19:58,  7 users,  load average: 0.02, 0.01, 0.00
Tasks: 181 total,   1 running, 179 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.8%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2074952k total,  1967968k used,   106984k free,   503416k buffers
Swap:  4192956k total,      128k used,  4192828k free,  1135640k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18751 shs       15   0  2424  980  724 R  2.0  0.0   0:00.01 top
    1 root      15   0  2160  592  516 S  0.0  0.0   0:01.07 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.07 migration/0
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.77 migration/1
    6 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1
    7 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/1
    8 root      RT  -5     0    0    0 S  0.0  0.0   0:00.14 migration/2
    9 root      39  19     0    0    0 S  0.0  0.0   0:00.02 ksoftirqd/2
   10 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/2
   11 root      RT  -5     0    0    0 S  0.0  0.0   0:00.32 migration/3
   12 root      39  19     0    0    0 S  0.0  0.0   0:00.04 ksoftirqd/3
   13 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/3
   14 root      10  -5     0    0    0 S  0.0  0.0   0:00.02 events/0
   15 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/1
   16 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/2

 

پیشنهاد می‎کنیم بخوانید:
آموزش SSH به سرور با Putty

دستور vmstat برای بررسی مقدار RAM در لینوکس

آخرین دستوری که میتوانید برای بررسی وضعیت حافظه در لینوکس از آن استفاده کنید vmstat است ، در خروجی vmstat شما مقادیر عددی یکسان با دو دستور قبلی خواهید دید ، اما به شکل و در جای متفاوت.
مقدار swpd نمایش دهنده مقدار swap استفاده شده است ، در حالی که free نشان دهنده حافظه RAM آزاد است . البته مقادیر buff و cache مشابه buffer و cached خروجی دستورات top و free است ، چیزهایی که که در این دستور نخواهید دید مقادیر کل حافظه یا -/+ buffers/cache  است که به شما نشان بدهد سیستم شما در خصوص نیاز به حافظه بیشتر جقدر منعطف خواهد بود ،

:-) vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    128 106612 503380 1135668    0    0     2     2    3    2  0  0 100  0  0

خلاصه برخی سوالاتی که در این مقاله به آنها اشاره شده است

تفاوت buffer و cached در لینوکس چیست ؟

مقدار buffers نشان دهنده بلوک های in-memory حاصل دسترسی های کرنل به دیسک است ، مثلا وقتی که کرنل نیاز به خواندن محتوای فایلها داشته باشد ،
مقدار cached به ما خواهد گفت که چه مقدار از RAM برای کش کردن محتوای فایلهایی که به تازگی خوانده شده است استفاده شده ،
مقدار buffer با افزایش درخواستهایی که لایه فایل سیستم را دور میزند افزایش پیدا می کند ، در صورتی که مقدار cache با استفاده از فایل سیستم افزایش پیدا می کند ، هر دو ااین مقادیر با افزایش عملیات خواندن اطلاعات از DISK افزایش پیدا می کند

تفاوت cached و buffer در دستور free لینوکس چیست؟

مقدار buffer با افزایش درخواستهایی که لایه فایل سیستم را دور میزند افزایش پیدا می کند.
در صورتی که مقدار cache با استفاده از فایل سیستم افزایش پیدا می کند
در عین حال هر دو این مقادیر با افزایش عملیات READ از DISK افزایش پیدا می کند

دستور نمایش وضعیت RAM در لینوکس

بهترین دستور برای داشتن یک نگاه کلی سریع و دقیق به وضعیت مصرف مموری در لینوکس احتمالا free خواهد بود ،
با در نظر گرفتن این نکته که شما از این مقاله مفهوم -/+ buffers/cache را درک کرده باشید ، متوجه خواهید شد که نباید زیاد نگران مقادیر اعداد بشاد ، مثلا اینکه شما در حال مصرف 95% رم هستید باشد

مقدار buffer در خروجی دستور free یا top لینوکس چیست ؟

مقدار buffers نشان دهنده بلوک های in-memory حاصل دسترسی های کرنل به دیسک است ، مثلا وقتی که کرنل نیاز به خواندن محتوای فایلها داشته باشد.

مقدار cached در خروجی دستور free یا top لینوکس چیست ؟

مقدار cached به ما خواهد گفت که چه مقدار از RAM برای cache کردن محتوای فایلهایی که به تازگی خوانده شده است استفاده شده.

۲ دیدگاه‎‎ها
  1. sysadmin می‎گوید

    مقاله مناسبی بود و چند نکته خوب را به من یاد داد. برای کسانی که دانش مقدماتی از لینوکس دارند مناسب است.
    سپاس از وقتتان

    1. مهران می‎گوید

      خوشحالیم که برای شما مفید واقع شده ، خوشحال می شویم اگر نقاط ضعف و قوت ما را از نظر خودتان در این مقاله یا مقالات دیگر مطرخ کنید

دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید