چه طور کش حافظه ram (مموری) و فضای swap و Buffer را در لینوکس پاک کنیم؟ مانند هر سیستم عامل دیگر، گنو/لینوکس یک مدیریت حافظه موثر را راه اندازی کرده است. اما اگر هر پروسسی حافظه شما را زیاد مصرف کند و شما بخواهید آن را پاک کنید، لینوکس یک راه برای flush یا پاک کردن کش ram فرآهم می کند.
چگونه cache را در لینوکس پاک کنیم؟
هر سیستم لینوکس می تواند به سه طریق بدون ایجاد وقفه در پروسس ها یا سرویس ها کش را پاک کند.
1. فقط پاک کردن PageCache
2. پاک کردن dentry ها و inode ها
3. پاک کردن PageCache ،dentry ها و inode ها.
توضیح دستور بالا
Sync بافر سیستم فایل را flush می کند. بعد دستور بعد از “;” اجرا می شود. شل صبر می کند هر دستوری به پایان برسد بعد دستور بعدی را اجرا می کند. همان طور که در مستندات کرنل آمده است، نوشتن در drop_cache باعث پاک شدن کش بدون کشتن هیچ برنامه/سرویسی می شود، و دستور echo کار نوشتن در فایل را انجام میدهد.
اگر می خواهید cache دیسک را پاک کنید، اولین دستور امن ترین می باشد “...echo 1 > ….” چون فقط PageCache را پاک میکند. توصیه می شود از آپشن سوم “...echo 3 >” استفاده نکنید مگر این که مطمئن باشید، چون باعثپاک شدن PageCache ،dentry ها و inode ها می شود.
آیا فکر خوبی است که کش و بافری که شاید در حال استفاده توسط کرنل لینوکس است را آزاد کنیم؟
وقتی تنظیمات متنوعی را اعمال می کنید و می خواهید آن را چک کنید، به خصوص این که روی I/O اعمال شده است، نیاز خواهید داشت که cache بافر را پاک کنید. شما می توانید کش را به صورت بالا بدون نیاز به ربوت پاک کنید (هیچ downtime ای ندارد)
لینوکس به طوری طراحی شده است که قبل از نگاه کردن به دیسک به کش دیسک نگاه می کند. اگر منبع در کش پیدا شود، دیگر درخواست به دیسک نمی رسد. اگر ما کش را پاک کنیم، سیستم عامل برای منبع به دیسک مراجعه خواهد کرد.
پاک کردن کش برای چند ثانیه سیستم را کند خواهد کرد و بعد هر منبعی که لازم است دوباره در کش لود می شود.
حالا با cron و ایجاد شل اسکریپت کاری می کنیم که کش ram به صورت اتوماتیک روزانه در ساعت 2 بعد از ظهر پاک شود. یک شل اسکریپت clearcache.sh ایجاد کنید و خطوط پایین را اضافه کنید.
برای فایل clearcache.sh مجوز اجرایی ست کنید.
حالا می تونید هر وقت که می خواهید برای پاک کردن کش ram، اسکریپت را فرا بخوانید.
حالا cron را ست کنید تا کش ram را روزانه در ساعت 2pm پاک کند. Crontab را برای ادیت باز کنید.
سطر زیر را به آن اضافه کنید و سیو کرده و خارج شوید.
برای جزئیات بیشتر در مورد cron مقاله زیر را مطالعه کنید:
دستور Cron Jobs و Crontab در لینوکس برای زمان بندی کارها
آیا ایده خوبی است که به صورت اتوماتیک کش ram را در یک production سرور پاک کنیم؟
نه خیر نیست. فرض کنید که طوری تنظیم کرده اید که کش ram هر روز ساعت 2pm پاک شود. هر روز ساعت 2pm اسکریپت اجرا می شود و کش ram شما را flush می کند. یک روز به هر دلیلی، کاربران آنلاین بیشتری در حال مشاهده وب سایت شما هستند و از سرورتان درخواست منبع دارند.
همان موقع اسکریپت اجرا می شود و همه چیز را از کش پاک می کند. حالا تمام کاربران داده را از دیسک می گیرند. این باعث crash سرور و خراب شدن دیتابیس می شود. پس هر وقت لازم بود کش ram را پاک کنید.
چه طور فضای swap را در لینوکس پاک کنیم؟
اگر شما می خواهید فضای swap را پاک کنید، می توانید از دستور زیر استفاده کنید.
یا شاید شما دستور بالا را به یک اسکریپت cron اضافه کنید، البته باید ریسک ها را در نظر بگیرید.
حالا ما دو دستور بالا را با هم ترکیب خواهیم کرد تا یک اسکریپت برای پاک کردن کش ram و فضای swap ایجاد کنیم.
بعد از تست دو دستور بالا ، قبل و بعد از اجرای اسکریپت دستور“free -h” را اجرا کنید و کش را چک کنید.
منتظر نظرات و فیدبک تون هستم .
چگونه cache را در لینوکس پاک کنیم؟
هر سیستم لینوکس می تواند به سه طریق بدون ایجاد وقفه در پروسس ها یا سرویس ها کش را پاک کند.
1. فقط پاک کردن PageCache
کد:
# sync; echo 1 > /proc/sys/vm/drop_caches
کد:
# sync; echo 2 > /proc/sys/vm/drop_caches
کد:
# sync; echo 3 > /proc/sys/vm/drop_caches
توضیح دستور بالا
Sync بافر سیستم فایل را flush می کند. بعد دستور بعد از “;” اجرا می شود. شل صبر می کند هر دستوری به پایان برسد بعد دستور بعدی را اجرا می کند. همان طور که در مستندات کرنل آمده است، نوشتن در drop_cache باعث پاک شدن کش بدون کشتن هیچ برنامه/سرویسی می شود، و دستور echo کار نوشتن در فایل را انجام میدهد.
اگر می خواهید cache دیسک را پاک کنید، اولین دستور امن ترین می باشد “...echo 1 > ….” چون فقط PageCache را پاک میکند. توصیه می شود از آپشن سوم “...echo 3 >” استفاده نکنید مگر این که مطمئن باشید، چون باعثپاک شدن PageCache ،dentry ها و inode ها می شود.
آیا فکر خوبی است که کش و بافری که شاید در حال استفاده توسط کرنل لینوکس است را آزاد کنیم؟
وقتی تنظیمات متنوعی را اعمال می کنید و می خواهید آن را چک کنید، به خصوص این که روی I/O اعمال شده است، نیاز خواهید داشت که cache بافر را پاک کنید. شما می توانید کش را به صورت بالا بدون نیاز به ربوت پاک کنید (هیچ downtime ای ندارد)
لینوکس به طوری طراحی شده است که قبل از نگاه کردن به دیسک به کش دیسک نگاه می کند. اگر منبع در کش پیدا شود، دیگر درخواست به دیسک نمی رسد. اگر ما کش را پاک کنیم، سیستم عامل برای منبع به دیسک مراجعه خواهد کرد.
پاک کردن کش برای چند ثانیه سیستم را کند خواهد کرد و بعد هر منبعی که لازم است دوباره در کش لود می شود.
حالا با cron و ایجاد شل اسکریپت کاری می کنیم که کش ram به صورت اتوماتیک روزانه در ساعت 2 بعد از ظهر پاک شود. یک شل اسکریپت clearcache.sh ایجاد کنید و خطوط پایین را اضافه کنید.
کد:
#!/bin/bash # Note, we are using "echo 3", but it is not recommended in production instead use "echo 1" echo "echo 3 > /proc/sys/vm/drop_caches"
کد:
# chmod 755 clearcache.sh
حالا cron را ست کنید تا کش ram را روزانه در ساعت 2pm پاک کند. Crontab را برای ادیت باز کنید.
کد:
# crontab -e
کد:
0 3 * * * /path/to/clearcache.sh
دستور Cron Jobs و Crontab در لینوکس برای زمان بندی کارها
آیا ایده خوبی است که به صورت اتوماتیک کش ram را در یک production سرور پاک کنیم؟
نه خیر نیست. فرض کنید که طوری تنظیم کرده اید که کش ram هر روز ساعت 2pm پاک شود. هر روز ساعت 2pm اسکریپت اجرا می شود و کش ram شما را flush می کند. یک روز به هر دلیلی، کاربران آنلاین بیشتری در حال مشاهده وب سایت شما هستند و از سرورتان درخواست منبع دارند.
همان موقع اسکریپت اجرا می شود و همه چیز را از کش پاک می کند. حالا تمام کاربران داده را از دیسک می گیرند. این باعث crash سرور و خراب شدن دیتابیس می شود. پس هر وقت لازم بود کش ram را پاک کنید.
چه طور فضای swap را در لینوکس پاک کنیم؟
اگر شما می خواهید فضای swap را پاک کنید، می توانید از دستور زیر استفاده کنید.
کد:
# swapoff -a && swapon -a
حالا ما دو دستور بالا را با هم ترکیب خواهیم کرد تا یک اسکریپت برای پاک کردن کش ram و فضای swap ایجاد کنیم.
کد:
# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared' OR $ su -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'" root
منتظر نظرات و فیدبک تون هستم .