مانند هر سیستمعامل دیگری، GNU/Linux نیز مدیریت حافظه را به شکلی کارآمد و حتی فراتر از آن پیادهسازی کرده است. با این حال، اگر فرآیندی حافظهی سیستم شما را به خود اختصاص داده و شما قصد دارید آن را پاک کنید، لینوکس راهی برای پاکسازی یا تخلیه حافظهی RAM ارائه میدهد. در این مقاله، نحوه پاکسازی حافظهی RAM، بافر و فضای swap و به طور کلی پاک کردن کش در لینوکس را برای بهبود عملکرد کلی بررسی خواهیم کرد.
شناخت حافظه رم، حافظه نهان، بافر و فضای SWAP
در ابتدا، بیایید با حافظهی کش RAM، بافر و فضای swap در سیستم لینوکسی آشنا شویم.
حافظهی کش RAM
حافظهی کش RAM مکانیزمی است که توسط کرنل برای نگهداری دادههای پرتکرار استفاده میشود. اگرچه این موضوع باعث افزایش سرعت سیستم میشود، اما یک کش پر شده میتواند باعث نگهداری دادههای منسوخ شده و در نتیجه افت عملکرد گردد.
در سرورهایی مثل سرور مجازی لینوکس که کارایی بالا مورد نیاز است، مدیریت کش میتواند بسیار مهم باشد.
بافر
مانند کش، بافر نیز به صورت موقت دادهها را نگه میدارد، اما با تفاوت در هدف. بافر دادههای در حال انتقال بین اجزایی مانند CPU و دیسک سخت را ذخیره میکند و ارتباطات را روانتر میسازد. اما اگر حجم دادههای بافر شده زیاد باشد، ممکن است سرعت سیستم کاهش یابد، بهخصوص در محیطهایی مانند سرور اختصاصی ایران که نیاز به دسترسی سریع به منابع وجود دارد.
فضای Swap
فضای swap بخشی از دیسک سخت است که در صورت کمبود حافظهی فیزیکی به عنوان حافظهی مجازی استفاده میشود. این فضا از کرش شدن سیستم در صورت کمبود حافظه جلوگیری میکند، اما استفاده بیش از حد از آن میتواند باعث کاهش سرعت سیستم گردد.در سرور مجازی، تنظیم مناسب فضای swap میتواند نقش اساسی در پایداری سیستم داشته باشد.
پاکسازی حافظه نهان، بافر و فضای SWAP در لینوکس
در برخی مواقع، ممکن است نیاز به پاکسازی کش، بافر یا فضای swap داشته باشید که در ادامه توضیح داده شده است.
چگونه کش حافظه رم را در لینوکس پاک کنیم؟
هر سیستم لینوکسی سه گزینه برای پاکسازی کش دارد که بدون قطع شدن فرآیندها یا سرویسها قابل اجرا هستند.
پاکسازی PageCache
- برای پاکسازی فقط PageCache، میتوانید از دستور زیر استفاده کنید که بهطور خاص PageCache را پاک کرده و منابع حافظه را آزاد میکند:
sudo sync; echo 1 > /proc/sys/vm/drop_caches
پاکسازی Dentries و Inodes
- برای پاکسازی فقط Dentries و Inodes، میتوانید از دستور زیر استفاده کنید که سیستم فایل را همگامسازی کرده و هر دو را پاک میکند. این کار باعث آزادسازی اطلاعات کش شدهی دایرکتوریها و inodes و بهبود عملکرد سیستم میشود:
sudo sync; echo 2 > /proc/sys/vm/drop_caches
پاکسازی PageCache، Dentries و Inodes
- برای پاکسازی PageCache، Dentries و Inodes، میتوانید از دستور زیر استفاده کنید که سیستم فایل را همگامسازی کرده و هر سه را پاک میکند. این کار باعث آزادسازی حافظه و بهبود عملکرد سیستم میشود:
sudo sync; echo 3 > /proc/sys/vm/drop_caches
این دستورات مخصوصاً در محیطهای سرور مثل سرور مجازی هلند که سرعت و عملکرد بهینه حیاتی است، کاربرد زیادی دارند.
توضیح هر بخش از دستور بالا:
sudo
برای اجرای دستور به عنوان کاربر ارشد استفاده میشود.sync
برای تخلیهی بافر سیستم فایل به کار میرود.;
(نقطهویرگول) برای جدا کردن چند دستور در یک خط استفاده میشود.echo 3 > /proc/sys/vm/drop_caches
برای پاکسازی PageCache، یک ناحیهی موقت برای فایلهای اخیراً دسترسی یافته، استفاده میشود.
drop_caches
کنترل میکند که چه نوع دادههای کش شدهای باید پاک شوند و مقادیر به شرح زیر است:1 – فقط PageCache را پاک میکند.
drop_caches
کش را بدون بستن هیچ برنامه یا سرویسی پاک میکند. دستور echo
وظیفه نوشتن در فایل را دارد.چگونه فضای Swap را در لینوکس پاک کنیم؟
برای پاکسازی فضای Swap، میتوانید از دستور swapoff
با گزینه -a
استفاده کنید که تمامی پارتیشنهای Swap را غیرفعال میکند:
sudo swapoff -a
سپس با اجرای دستور زیر، تمامی پارتیشنهای Swap را مجدداً فعال کنید:
sudo swapon -a
آیا پاک کردن کش Buffer، Cache و Swap در لینوکس توصیه میشود؟
به طور کلی، پاکسازی دستی بافر و کش در لینوکس که ممکن است توسط کرنل استفاده شود، ایدهی خوبی نیست، زیرا کرنل به گونهای طراحی شده که این منابع را بهصورت کارآمد مدیریت کند و پاکسازی دستی آنها ممکن است عملکرد سیستم را مختل کند.
با این حال، در شرایط نادری که فشار شدید حافظه وجود دارد و نمیتوان به روشهای دیگر حافظه را پاک کرد، میتوان با احتیاط این کار را انجام داد.
همچنین، پاکسازی فضای Swap در لینوکس بهطور معمول یا در شرایط عادی توصیه نمیشود.
خودکارسازی فرایند بهینهسازی حافظه
برای خودکارسازی این فرآیند و پاکسازی منظم حافظه، میتوانید یک کرون جاب (cron job) تنظیم کنید تا دستورات را در فواصل زمانی مشخص اجرا کند.
فایل تنظیمات کرون را باز کنید:
crontab -e
سپس خطوط زیر را اضافه کنید تا کش، بافر و فضای Swap هر روز در نیمهشب پاک شوند:
0 0 * * * sudo sync; echo 3 > /proc/sys/vm/drop_caches
0 0 * * * sudo echo 1 > /proc/sys/vm/drop_caches
0 0 * * * sudo sync; echo 2 > /proc/sys/vm/drop_caches
0 0 * * * sudo swapoff -a && sudo swapon -a
آیا پاکسازی کش RAM در سرور لینوکس توصیه میشود؟
خیر، این کار توصیه نمیشود. فرض کنید یک اسکریپت را تنظیم کردهاید که هر روز ساعت 2 صبح کش RAM را پاک کند. اما یک روز، تعداد غیرمنتظرهای از کاربران به وبسایت شما متصل میشوند و فشار زیادی بر منابع سرور وارد میکنند. در همین حال، اسکریپت برنامهریزی شده اجرا میشود و همه چیز را از کش پاک میکند. حالا همه کاربران در حال بازیابی دادهها از دیسک هستند که ممکن است منجر به کرش سرور و خرابی پایگاه داده شود.
بنابراین، تنها زمانی کش RAM را پاک کنید که لازم است و از کار خود مطمئن باشید.
نتیجهگیری
مدیریت کارآمد حافظه برای یک سیستم لینوکس که بدون هیچ مشکلی کار کند بسیار اهمیت دارد. پاک کردن کش در لینوکس، بافر و فضای swap حافظه رم میتواند عملکرد سیستم را به میزان قابلتوجهی افزایش دهد. با درک این مکانیزم و بکارگیری دستورات ارائهشده، میتوانید سیستم یا سرور مجازی لینوکس خود را در بهترین حالت ممکن اجرا کنید.
نوشته پاک کردن کش در لینوکس؛ نحوه پاک کردن کش حافظه رم، بافر و فضای Swap! اولین بار در مجله آقای وب. پدیدار شد.