از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
آشنایی و درک مصرف RAM در لینوکس/یونیکس
سرفصلهای مطلب
در این مقاله موضوع مصرف 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
دستور 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 کردن محتوای فایلهایی که به تازگی خوانده شده است استفاده شده.
مقاله مناسبی بود و چند نکته خوب را به من یاد داد. برای کسانی که دانش مقدماتی از لینوکس دارند مناسب است.
سپاس از وقتتان
خوشحالیم که برای شما مفید واقع شده ، خوشحال می شویم اگر نقاط ضعف و قوت ما را از نظر خودتان در این مقاله یا مقالات دیگر مطرخ کنید