اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

چه طور Cache حافظه Ram ،فضای Swap و Buffer را در Linux پاک کنیم

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    چه طور Cache حافظه Ram ،فضای Swap و Buffer را در Linux پاک کنیم

    چه طور کش حافظه ram (مموری) و فضای swap و Buffer را در لینوکس پاک کنیم؟ مانند هر سیستم عامل دیگر، گنو/لینوکس یک مدیریت حافظه موثر را راه اندازی کرده است. اما اگر هر پروسسی حافظه شما را زیاد مصرف کند و شما بخواهید آن را پاک کنید، لینوکس یک راه برای flush یا پاک کردن کش ram فرآهم می کند.


    چگونه cache را در لینوکس پاک کنیم؟

    هر سیستم لینوکس می تواند به سه طریق بدون ایجاد وقفه در پروسس ها یا سرویس ها کش را پاک کند.
    1. فقط پاک کردن PageCache
    کد:
    # sync; echo 1 > /proc/sys/vm/drop_caches
    2. پاک کردن dentry ها و inode ها
    کد:
    # sync; echo 2 > /proc/sys/vm/drop_caches
    3. پاک کردن PageCache ،dentry ها و inode ها.
    کد:
    # 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"
    برای فایل clearcache.sh مجوز اجرایی ست کنید.
    کد:
    # chmod 755 clearcache.sh
    حالا می تونید هر وقت که می خواهید برای پاک کردن کش ram، اسکریپت را فرا بخوانید.

    حالا cron را ست کنید تا کش ram را روزانه در ساعت 2pm پاک کند. Crontab را برای ادیت باز کنید.
    کد:
    # crontab -e
    سطر زیر را به آن اضافه کنید و سیو کرده و خارج شوید.
    کد:
    0  3  *  *  *  /path/to/clearcache.sh
    برای جزئیات بیشتر در مورد cron مقاله زیر را مطالعه کنید:

    دستور Cron Jobs و Crontab در لینوکس برای زمان بندی کارها



    آیا ایده خوبی است که به صورت اتوماتیک کش ram را در یک production سرور پاک کنیم؟

    نه خیر نیست. فرض کنید که طوری تنظیم کرده اید که کش ram هر روز ساعت 2pm پاک شود. هر روز ساعت 2pm اسکریپت اجرا می شود و کش ram شما را flush می کند. یک روز به هر دلیلی، کاربران آنلاین بیشتری در حال مشاهده وب سایت شما هستند و از سرورتان درخواست منبع دارند.

    همان موقع اسکریپت اجرا می شود و همه چیز را از کش پاک می کند. حالا تمام کاربران داده را از دیسک می گیرند. این باعث crash سرور و خراب شدن دیتابیس می شود. پس هر وقت لازم بود کش ram را پاک کنید.



    چه طور فضای swap را در لینوکس پاک کنیم؟

    اگر شما می خواهید فضای swap را پاک کنید، می توانید از دستور زیر استفاده کنید.
    کد:
    # swapoff -a && swapon -a
    یا شاید شما دستور بالا را به یک اسکریپت cron اضافه کنید، البته باید ریسک ها را در نظر بگیرید.

    حالا ما دو دستور بالا را با هم ترکیب خواهیم کرد تا یک اسکریپت برای پاک کردن کش 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
    بعد از تست دو دستور بالا ، قبل و بعد از اجرای اسکریپت دستور“free -h” را اجرا کنید و کش را چک کنید.

    نحوه حذف کش مموری در لینوکس



    منتظر نظرات و فیدبک تون هستم .
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-30-2021, 05:27 PM.
    اینستاگرام انجمن لینوکس ایران : https://www.instagram.com/iranlinuxforum

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X