نشت حافظه چیست و چگونه اتفاق میافتد؟
مهم نیست رایانه شما چقدر سریع یا بهروز باشد، مشکلاتی مانند نشت حافظه میتواند دستگاه شما را با تمام مزیتهایی که دارد، تحت تأثیر قرار دهد. اما نشت حافظه دقیقاً چیست و چگونه اتفاق میافتد؟ در ادامه این مطلب رسانه مدیاتی به بررسی این موضوع میپردازیم.
نشت حافظه چیست؟
حافظه رایانه که به عنوان حافظه دسترسی تصادفی (RAM) شناخته میشود، به طور موقت اطلاعات مربوط به سیستم عامل، برنامهها و سرویسهای در حال اجرا در رایانه شما را ذخیره میکند. RAM به این دلیل استفاده میشود که سریع است – حتی از SSD هم سریعتر است – و برای ذخیره دادههایی که اغلب به آنها دسترسی دارید مفید است.
برنامهها در صورت نیاز از حافظه استفاده میکنند و اطلاعات مربوط به عملیاتهای مختلف، اقدامهای بعدی شما، دادههای درخواستی مکرر و اطلاعات این چنینی را ذخیره میکنند. هنگامی که یک برنامه استفاده از حافظه اختصاص داده شده را متوقف میکند، به این معنی است که حافظه اکنون آزاد است. با این حال، اگر برنامه بدون بازگرداندن حافظه اختصاص داده شده به کار خود ادامه دهد، به تدریج حافظه بیشتر و بیشتری را مصرف میکند. تداوم یافتن این وضعیت، در نهایت باعث از کار افتادن سیستم میشود.
چگونه نشت حافظه را تشخیص دهیم؟
هنگامی که سیستم دچار کمبود حافظه میشود، به احتمال زیاد پیام هشداری روی صفحه دریافت خواهید کرد که میگوید “حافظه رایانه شما کم است.” این یک پیام مشابه در تمام سیستم عاملهای اصلی است و پس از مشاهده آن، احتمالاً متوجه کاهش عملکرد خود خواهید شد و به مرور نیز سیستم از کار میافتد.
ساده ترین راه برای بررسی نشتی حافظه، مشاهده میزان مصرف رم سیستم شما است. اگر میبینید که برنامه یا فرآیندی بهطور پیوسته حافظه بیشتری مصرف میکند، نشانهای قطعی است که مشکلی وجود دارد که میتواند ناشی از نشت حافظه باشد. به عنوان مثال، در تصویر زیر، گوگل کروم از مقدار زیادی حافظه استفاده میکند، اما اگر توجه کنید پنج پنجره کروم باز است که در آن حدود 20 تب باز است و 32 گیگابایت رم مصرف میکند. درست است که این میزان بالاست ولی طبیعی است. حالا، اگر به لیست فرآیندها نگاه کنید و Spotify را پیدا کنید، میبینید که از مقدار RAM مشابهی استفاده میکند؛ این مسئله نشاندهنده یک مشکل و احتمالا نشت حافظه است.
نحوه بررسی میزان مصرف رم در ویندوز
روی نوار وظیفه کلیک راست کرده و Task Manager را انتخاب کنید. در برگه فرآیندها، ستون حافظه را مرتب کنید تا بیشترین مقادیر مصرف در بالا قرار گیرد. ارزیابی کنید که آیا برنامههای موجود در بالا از مقدار استاندارد حافظه استفاده میکنند یا خیر. برای بستن یک فرآیند، روی آن کلیک راست کرده و End Process را انتخاب کنید.
نحوه بررسی میزان مصرف رم در macOS
به Applications > Utilities بروید، سپس Activity Monitor را باز کنید. برگه Memory را در بالای پنجره Activity Monitor انتخاب کنید. ستون حافظه را طوری مرتب کنید که بیشترین مقادیر در بالا باشند. اکنون برنامه یا فرآیندی را که میخواهید به پایان برسانید انتخاب کنید، سپس دکمه توقف را بزنید.
پس از آن macOS دو گزینه در اختیار شما قرار میدهد: خروج و خروج اجباری. گزینه دوم فوراً فرآیند را خاتمه میدهد و هر گونه داده ذخیرهنشده را حذف میکند.
پیامدهای نشت حافظه
عواقب و مشکلات نشت حافظه به استفاده از برنامههای کاربردی مشتری یا سرور بستگی دارد.
برنامههای کاربردی مشتری (دسکتاپ و تلفن همراه): برای این موارد، عواقب نشت حافظه خیلی جدی نیست، زیرا حافظه اختصاص داده شده با پایان برنامه، آزاد میشود. بنابراین، هیچ بیثباتی سیستم وجود ندارد. برخی از مشکلاتی که در استفاده بیش از حد از حافظه با آن مواجه میشوند عبارتند از:
- ممکن است سرعت سیستم شما شروع به کند شدن کند.
- برنامههای رایانه شما ممکن است به طور ناگهانی بسته شوند.
- کد برنامه کاربردی رایانه که حافظه را تخصیص میدهد، میتواند خراب شود و باعث ایجاد اشکال شود.
با این حال، در موارد جدیتر، نشت حافظه میتواند فرصتی برای حملات تزریق کد ایجاد کند که میتواند منجر به از دست دادن دادهها و سایر مشکلات امنیتی شود.
برنامههای کاربردی سرور: مشکل نشت حافظه در این مورد وخیمتر میشود، زیرا سرورها معمولاً برای مدت طولانی بدون راهاندازی مجدد کار میکنند. مشکلاتی که در اینجا وجود دارد مانند مشکلات مربوط به برنامههای دسکتاپ است. حافظه در طول روزها، هفتهها و ماهها مصرف میشود و عملکرد سرور کاهش مییابد. اشکالات شروع به ظاهر شدن میکنند که باعث از کار افتادن سیستم میشوند .
مشابه برنامههای مشتری، نشت حافظه طولانی مدت میتواند فرصتی برای مهاجمان ایجاد کند تا از حمله تزریق کد سوء استفاده کنند و دادهها را به خطر بیندازند.
چگونه از نشت حافظه جلوگیری کنیم؟
وقتی نوبت به کدنویسی میرسد، بیشتر زبانهای برنامهنویسی دارای ویژگیهایی هستند که به توسعهدهندگان در مدیریت خودکار حافظه کمک میکنند؛ مانند زباله جمعکن، که به آزاد کردن حافظهای که استفاده نمیشود کمک میکند. انواع مختلفی از زباله جمع کن وجود دارد، و درک نحوه عملکرد زباله جمعکن برنامه شما، گام مهمی در جلوگیری از نشت حافظه است.
روش دیگر برای جلوگیری از نشت حافظه، نوشتن کدی است که منابع غیرضروری را دفع کند. شما باید کد خاصی را بنویسید که به برنامه نشان دهد کار منبع به پایان رسیده است و دیگر از حافظه استفاده نمیشود. اطمینان حاصل کنید که حلقهها به طور کامل اجرا میشوند تا از وقوع نشت حافظه جلوگیری شود.
با این حال، اگر برنامهنویسی نمیکنید و فقط با نشت حافظه در رایانه شخصی خود مواجه شدهاید، راهاندازی مجدد سیستم شما نشت حافظه را برطرف میکند و اگر یک باگ موقتی باشد، به طور بالقوه از تکرار آن جلوگیری میکند. همچنین باید سیستم عاملی را که از آن استفاده میکنید، اعم از ویندوز، macOS یا لینوکس، بهروز کنید. نشت حافظه که از طریق کد معیوب یا باگ دیگری ایجاد شده است احتمالاً از طریق یک بهروزرسانی، چه برای سیستم عامل یا برنامه مورد نظر، برطرف خواهد شد.