فضای SWAP

16-swapfile_swapon
فضای swap هنگامی که فضای حافظه اصلی (RAM) پر میشود و دیگر جایی برای فرایندهای جدید وجود نداشته باشد، مورد استفاده قرار میگیرد. توجه کنید که فرایند بخشی از یک برنامه است که برای اجرا شدن باید ابتدا توسط الگوریتمهای زمانبندی خاص (مانند FIFI، SJF و غیره) از فضای دیسک (حافظه ثانویه: مانند هارددیسک) به درون حافظه اصلی بارگذاری شود (در صف آماده برای اجرا قرار بگیرد) و سپس برای اجرا شدن توسط الگوریتمهای زمانبندی فرایندها، برای اجرا شدن، پردازنده را دریافت کنند. فرض کنید سیستم ما یک پردازنده دارد و تعداد بسیاری فرایند نیز در حافظه اصلی. برای اجرا شدن فرایندها باید صفبندی شوند. حال یک فرایند با اولویت بالا اگر بخواهد اجرا شود اما جایی در حافظه اصلی وجود نداشته باشد تا فرایند در آن قرار بگیرد، در این موقع، سیستمعامل توسط معیارهایی فرایندی را برای خروج از حافظه اصلی و قرار گرفتن در حافظه فضای swap انتخاب میکند. به عمل مبادله فرایندها میان حافظه اصلی و فضای swap، اصطلاحا swapping، به عمل خروج فرایند از حافظه اصلی و قرارگیری در swap، اصطلاحا swap in و به عمل خروج فرایند از swap و قرارگیری در حافظه اصلی، اصطلاحا swap out گفته میشود. توجه داشته باشید که swap جزئی از حافظه اصلی (RAM) نیست بلکه فضایی است بر روی رسانه ثانویه مانند هارددیسک. به همین خاطر است که زمان نصب هر توزیع لینوکسی فضای SWAP یا هر سیستمعامل دیگر یونیکسی، بخشی از هارددیسک را از نوع سیستم فایل swap، پارتیشنبندی میکنید.
برای ایجاد یک swap file (یک فضای swap اضافی بهصورت یک فایل) باید بهصورت زیر عمل کنید:
ابتدا یک فایل با اندازه مشخص توسط دستور dd ایجاد میکنیم. سپس از دستور mkswap برای ایجاد ساختار سیستم فایل swap بر روی فایل استفاده کنید. در نهایت با دستور swapon آن را به لیست فضاهای swap موجود روی سیستم معرفی کنید.
آموزش ایجاد فضای swap در سیستم عامل لینوکس
در همین ابتدا بگوییم، Swap در سیستم عامل لینوکس همان نقش حافظه در سیستم ویندوز را بر عهده دارد. با کمی کار و مطالعه در این حوزه متوجه میشوید که با استفاده از این نوع از پارتیشن بندی میتوان کارکرد سیستم عامل لینوکس را ارتقاء بخشید. این نکته را هم یادآور شویم که این فضا زمانی به کار شما میآید که رم و حافظه سیستم کامپیوترتان به حد کامل اشغال شده و دیگری فضایی برای کار شما وجود ندارد و در این زمان فضای swap به رو کار میآید تا برنامه هایتان دچار اختلال نشوند.
برای اینکه بتوانید بیشتر در جریان کار فضای swap در سیستم عامل لینوکس قرار بگیرید. موافق هستید برای لحظاتی با ما مجموعه آفتاب مارکتینگ همراه شوید. تا حالا فکر کردید که چه بخشی از هارد کامپیوترتان را پارتیشنswap میبایست اشغال کند. در بخش بعدی جوابتان را دریافت خواهید کرد.
فضای swap در سیستم لینوکس چیست؟
همیشه وقتی صحبت از ایجاد فضای swap در سیستم عامل لینوکس میشود، برخی این سوال در ذهنشان مطرح میشود که در کل چه بخشی از هارد را بایستی به این پارتیشن اختصاص داد. در پاسخ میتوان گفت، این کاملاً بستگی به شما و حجم کارتان دارد. این نکته را هم یادآور شویم که درست است که فضای این پارتیشن، نقش حافظه و ذخیره اطلاعات در سیستم لینوکس را بازی میکند، منتها با همه این تفاصیل، هیچ وقت نمیتواند جایگزین رم سیستم کامپیوتر و … شود. در واقع فضای swap نقش کمکی را برای پیشبرد اهداف شما ایفا میکند.
برویم سراغ این موضوع که چگونه میتوان فضای swap را در لینوکس ایجاد نمود. شما بایستی به دو نکته مهم پیش از هر کاری توجه کنید. اول آنکه حتماً از اطلاعات سیستم تان بک آپ Back up تهیه کنید. مورد بعدی آن که در هنگام اضافه کردن فضای swap به هارد سیستم کامپیوترتان به root دسترسی را داشته باشید.
آموزش ایجاد فضای swap در سیستم عامل لینوکس
در این لحظه بایستی اول سیستم کامپیوترتان را چک کنید که آیا پارتیشن sawp دارد یا نه؟ میتوانید از این کد کمک بگیرید.
$ sudo swapon –show
در ادامه وقتی با نوشتن این کد، شما خروجی دریافت کردید، متوجه خواهید شد که پارتیشن swap موجود است و در غیر این صورت برای ایجاد این پارتیشن بایستی پیش قدم شوید. البته گاهی وقت ها هم مشاهده میشود که سیستم ها، پارتیشن جداگانه ندارند. در این حالت از یک فایل میتوانید برای ایجاد این نوع از پارتیشن استفاده کنید. راستی تا یادمان نرفته بگوییم که تعیین میزان حجم فضا برای ساخت این پارتیشن یاد شده به خود شما بستگی دارد.
به طور مثال میتوانید این کد را ثبت کنید و به جای یک گیگ که در نوشته میبینید، شما عدد حجم مورد نظر خود را وارد کنید.
$ sudo fallocate -l 1G /swapfile
ممکن است برای برخی افراد در سیستم کامپیوتر، کار همانطور که انتظار میرود پیش نرود و با خطاهایی در هنگام خروجی دادن مواجه شوید. نگران نباشید برای این مسئله هم راهکار وجود دارد. فقط کافیست در هنگام درج کد از حروف dd به صورتی که در مبادله مقاله میبینید استفاده کنید.
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
راستی قبلاً به شما گفتیم که برای تکمیل این کار به دسترسی root سیستم نیاز دارید. از طرفی برای دسترسی به root میبایست رمز عبور آن را در اختیار داشته باشید. پس قضیه قدری متفاوت میشود. اگر رمز را ندارید این کد را درج نمایید.
$ sudo chmod 600 /swapfile
در این مرحله بایستی یک فایل در لینوکس برای پارتیشن بندی swap داشته باشیم. ابزار mksawp میتواند در این زمینه یاری تان کند.
$ sudo mkswap /swapfile
اگر میخواهید پارتیشن را در سیستم عامل لینوکس فعال کنید نیاز به کد دیگری دارید.
$ sudo swapon /swapfile
در نهایت برای اینکه به طور مستمر از پارتیشن swap در سیستم عامل لینوکس استفاده کنید، به کدهایی که در ادامه ارائه میشود توجه ویژه نمایید.
swap چیست و ایجاد این فضا بدون پارتیشن بندی مجدد هارد
swap فضایی روی هارد درایو که سیستم عامل لینوکس در صورتی که کل فضای رم پر بشه برای جلوگیری از کرش سیستم از اون استفاده میکنه. و مقداری از اطلاعاتی که قرار بود روی رم باشه رو روی اون نگه داری میکنه. قطعا اولین چیزی که به ذهن میرسه اینه که این کار باعث کند شدن سیستم عامل میشه. اما اگر کمی دقت کنید کند شدن سیستم خیلی بهتر از اینه که سیستم کرش کنه و احتمالا شما مقداری از اطلاعات رو از دست بدید.
در حالت کلی بهتره که swap کاملا خالی باشه مخصوصا اگر روی سرور باشه. با توجه فضای SWAP فضای SWAP به این که سواپ رو یا با فرمت و یا با ریبوت باید خالی کرد، در نتیجه بهتره هر از مدتی چک کنید ببینید چیزی واردش شده یا نه. اگر swap شما استفاده شده بود اساسا به این معنیه که برای مدتی رم شما پر شده بوده و مقداری از اطلاعات رو به سواپ منتقل کرده. این اتفاق میتونه با اجرای نرمافزارهای سنگین رخ بده. مثلا استفاده از ماشین های مجازی. اگر این سواپ شما مرتبا پر میشه این به این معنیه که مقدار رم شما برای کاری که انجام میدید کافی نیست و بهتره رم جدید تهیه کنید.
اما اگر شما لینوکس رو نصب کردید و فضای سواپ برای سیستم عامل تعریف نکردید. 2 راه دارید برای ساخت این فضا:
1- از یک دیسک زنده استفاده کنید، سیستم رو با اون بوت کنید و بعد از اون یکی از پارتیشن هارو تغییر حجم بدید و یک پارتیشن جدید برای swap بسازید.
2- از یک فایل به عنوان swap استفاده کنید!
در این جا من روش دوم رو توضیح میدم.
اول یک فایل به کمک دستور dd درست میکنیم. حجم این فایل بهتره 2 برابر حجم رم و کمتر از 8 گیگ باشه. یعنی اگر 2 گیگ رم دارید این فایل رو به اندازه 4 گیگ درست کنید ولی اگر رم شما 16 گیگه اون رو به اندازه 8 گیگ درست کنید. من شک دارم اگر 8 گیگ از اطلاعاتی که قرار بوده روی رم نوشته بشه رو روی هارد قرار بدیم سیستم اصلا بتونه کاری کنه!
dd if=/dev/zero of=/swap.img bs=1024 count=
بعد فایل رو به عنوان سواپ فرمت می کنیم. (از این دستور میشه برای خالی کردن سواپ هم استفاده کرد. البته قبل از اون باید swap رو غیر فعال کنید. و جلوی دستور آدرس پارتیشن رو به صورت /dev/sdX وارد کنید.
آموزش افزودن فضای Swap در CentOS 7 و تنظیمات بهبود عملکرد Swap
یکی از سادهترین راهها برای پاسخگویی بهتر سرور و محافظت در برابر خطاهای رایج Out of Memory در برنامهها و سرویسها، افزودن فضای Swap است. فضای Swap یک درایو ذخیره سازی است که سیستم عامل میتواند اطلاعاتی که امکان ذخیره سازی آن در حافظه وجود ندارد را بصورت موقت در آن ذخیره کند. یا به عبارتی سادهتر، Swap یک فضا بر روی دیسک است که در صورت پر شدن فضای حافظه فیزیکی (Ram) از آن بصورت موقت استفاده میکند.
در این آموزش نحوه افزدون فضای Swap در CentOS 7 را با هم فرا خواهیم گرفت.
بررسی سیستم برای اطلاعات Swap
قبل از شروع، میبایست فضای ذخیره سازی سرور خود بررسی کنیم که ببینیم آیا در حال حاضر فضای Swap داریم یا خیر.
میتوانیم با استفاده از دستور زیر بررسی نماییم.
در صورتی که خروجی از این دستور دریافت نکردیم، مطمئنم میشویم که فضای Swap بر روی سیستم یا سرور خود نداریم.
روش دیگر بررسی وجود فضای Swap استفاده از دستور free است. میتوانیم با استفاده از دستور زیر بررسی نماییم.
دستور بالا میزان فضای حافظه استفاده شده و خالی سیستم را نمایش میدهد. در صورتی که فضای Swap نداشته باشیم، مقدار آن 0 برگردانده میشود.
بررسی فضای خالی دیسک
سریعترین و در دسترسترین روش برای افزودن فضای Swap بر روی دیسک، استفاده از افزودن فضای Swap بر روی پارتیشن موجود است.
بدین منظور، با استفاده از دستور زیر، اطلاعات فضای دیسک خود را بررسی میکنیم.
با توجه به خروجی نمونه متوجه میشویم که فضای خالی دیسک ما 18 گیگابایت میباشد.
در حال حاضر، میبایست با توجه به نیاز، فضای Swap خود را تعیین کنیم و در دستورات آتی جهت ایجاد فضای Swap از آن استفاده نماییم.
در این مثال، فضای Swap را 4 گیگابایت در نظر خواهیم گرفت.
ایجاد فایل Swap
اکنون که فضای خالی بر روی دیسک خود داریم، میتوانیم فضای Swap را ایجاد نماییم. ما در این مرحله یک فایل با نام swapfile در شاخه / ایجاد میکنیم. البته میتوانیم از هر نام دیگری برای فضای Swap خود استفاده نماییم.
سریعترین و سادهترین راه برای ایجاد فایل Swap استفاده از دستور fallocate میباشد. با استفاده از دستور زیر یک فایل 4 گیگابایتی ایجاد میکنیم.
فایل swapfile به سرعت ایجاد میشود و با استفاده از دستور ls میتوانیم بررسی کنیم.
فعال کردن فایل Swap
در حال حاضر فایل ما ایجاد شده است، ولی سیستم یا سرور نمیداند که این فایل قرار است برای فضای Swap استفاده شد. میبایست این فایل را بصورت Swap فرمت، سپس آن را فعال کنیم.
قبل از انجام هر کاری، ابتدا مجوز یا سطح دسترسی فایل را بصورت صحیح انجام میدهیم تا از خواندن یا نوشتن فایل توسط کاربران دیگر (به جز root) جلوگیری نماییم.
با استفاده از دستور chmod تنظیمات سطح دسترسی را بصورت صحیح انجام میدهیم.
این دستور، مجوز خواندن و نوشتن فایل را فقط به کاربر root محدود میکند.
با استفاده از دستور ls -lh میتوانیم این مورد را نیز بررسی نماییم.
در حال حاضر که فایل Swap امن شده است، میتوانیم با استفاده از دستور زیر فضای Swap را تنظیم نماییم.
فایل Swap ایجاد شده جهت استفاده به عنوان فضای Swap آماده شده است و میتوانیم با استفاده از دستور زیر فضای SWAP آن را فعال نماییم.
جهت بررسی و تایید این موضوع، از دستور زیر جهت گزارشگیری از فضای Swap استفاده میکنیم.
همچنین میتوانیم از دستور free نیز استفاده نماییم.
فضای Swap با موفقیت تنظیم شده است و سیستم یا سرور در صورت لزوم میتواند از این فضا استفاده نماید.
ایجاد تغییرات دائمی در فایل Swap
فضای Swap ما در حال حاضر فعال است ولی پس از ریستارت، سرور نمیتواتد بصورت خودکار از این فایل به عنوان فضای Swap استفاده کند. میتوانیم این مورد را با تغییر در فایل fstab ایجاد نماییم. fstab که مخفف File System Table میباشد، فایلی برای برای پیکربندی سیستم و جدولی برای مدیریت فایل سیستم (File System) و پارتیشنها میباشد که معمولاً در آدرس /etc/fstab قرار دارد.
فایل fstab را با ویرایشگر دلخواه مانند nano یا vi ویرایش میکنیم.
در انتهای فایل، یک خط به عنوان فضای Swap اضافه مینماییم.
پس از ایجاد تغییر، فایل را ذخیره و از آن خارج میشویم. در این صورت پس از هر بار ریستارت سیستم یا سرور، فضای Swap جهت استفاده آماده خواهد بود.
تنظیمات بهبود عملکرد Swap (اختیاری)
راه حلهای مختلفی برای افزایش و بهبود عملکرد سیستم هنگام استفاده از فضای Swap وجود دارد. این تنظیمات اختیاری میباشد و به نیاز سیستم و برنامه شما بستگی دارد.
Swappiness
پارامتر Swappiness به عنوان یک ویژگی هسته یا کرنل لینوکس، تعیین میکند که چند بار سیستم میتواند از فضای Swap استفاده کند. این مقدار بین 0 تا 100 است که درصد استفاده از حافظه را نشان میدهد. مقدار کم Swappiness باعث میشود هسته تا سعی خواهد کرد تا حد امکان از Swap جلوگیری کند مگر اینکه کاملاً ضروری باشد، توجه داشته باشید که استفاده از Swap هزینه بالایی در کیفیت استفاده از سرویسها برای ما خواهد داشت زیر بسیار کندتر از فضای حافظه عمل میکند و مقدار بالاتر این پارامتر باعث میشود هسته یا کرنل لینوکس سریعتر از فضای Swap استفاده کند.
با استفاده از دستور زیر میتوانیم مقدار فعلی پارامتر Swappiness را مشاهده نماییم.
مقدار پارامتر Swappiness در CentOS 7 بصورت پیشفرض 30 میباشد که این مقدار برای سیستمهای خانگی مناسب است. برای استفاده از سرور در کارهای عملیاتی و تجاری، این مقدار را به صفر نزدیک خواهیم کرد.
میتوانیم مقدار Swappiness را با استفاده از دستور sysctl به مقدار دلخواه دیگری تغیر دهیم.
به عنوان مثال، مقدار Swappiness را به 10 تغییر میدهیم.
اعمال این تنظیمات تا ریستارت نشدن سرور پابرجاست، به منظور دائمی کردن این تغییرات خط زیر فضای SWAP را به فایل کانفیگ sysctl اضافه مینماییم.
تنظیمات Swappiness را به انتهای فایل اضافه مینماییم.
پس از اعمال تغییرات، در صورت ریستارت شدن سرور مقدار Swappiness بر روی مقدار تعیین شده تنظیم خواهد شد.
Cache Pressure
مقدار دیگری که ممکن است بخواهیم آن را تغییر دهیم vfs_cache_pressure است. این تنظیم بر روی ذخیره اطلاعات metadata فایل سیستم تاثیر خواهد گذاشت. خواندن و بازخوانی (refreshing) این اطلاعات بسیار پر هزینه است، بنابراین ذخیره بیشتر آن در Cache برای عملکرد سیستم بسیار عالی است.
میتوانیم مقدار فعلی Cache Pressure را با استفاده از دستور زیر مشاهده نماییم.
همانطور که مشاهده مینمایید، در حال حاضر با تنظیم مقدار 100 اطلاعات ورودی به سرعت از Cache حذف میشوند. میتوانیم با استفاده از sysctl این مقدار را بر روی 50 برای اعمال تنظیمات محافظه کارانهتر تغییر دهیم.
همچنین برای دائمی کردن این مقدار مانند Swappiness، تنظیمات آن را به فایل تنظیمات اضافه مینماییم.
خط زیر را به انتهای فایل اضافه میکنیم.
پس از ذخیره کردن فایل، تنظیمات مورد نظر پس از ریستارت سیستم نیز بر روی سیستم وجود خواهند داشت.
کاوشگر لینوکس
تعریف حافظه مجازی یا فضای swap بیشتر با ایجاد swap file
توزیعهای گنو/لینوکس برای بالا بردن کارائی سیستم و خصوصا در فضای SWAP مواقعی که میزان RAM تکافوی نیازهای حافظه ای سیستم را نمی نماید (مثلا وقتی که شما از میزان حافظه RAM کمی در سیستم خود بهره میگیرید) اقدام به شبیه سازی حافظه RAM بر روی هارد دیسک یا ایجاد همان فضای SWAP مینمایند .
هر توزیع مبتنی بر گنو/لینوکس که استفاده کنید حداقل ملزومات پارتیشن بندی سیستم برای نصب لینوکس باید شامل پارتیشن root یا ( / ) و یک پارتیشن swap باشد .
لزوم ایجاد swap partition و تعین مقدار فضای مناسب هارد دیسک برای آن برای کارائی مطلوب سیستم ضروری است و معمولا فضای swap مورد نیاز یک سیستم تقریبا دو برابر میزان ram نصب شده در دستگاه میباشد .
اگر در هنگام نصب توزیع لینوکس خود فراموش کرده اید یا در اثر عدم آگاهی از امکانات سیستم خود ننوانسته اید که به میزان کافی فضای swap partition ایجاد کنید آیا باید مراحل نصب لینوکس را دوباره از ابتدا تکرار کنید تا مشکل برطرف شود ؟
پاسخ این سئوال مثل بسیاری از موارد دیگر که به تطبیق پذیری و قابلیتهای بی نظیر گنو/لینوکس مربوط میشود منفی است .
شما میتوانید با ایجاد و فعال کردن swap files یک فایل مجازی را بعنوان swap اضافی برای سیستم خود تعریف کنید و سیستم شما از آن دقیقا مثل swap partition استفاده کند .
برای اینکارابتدا باید یک swap file ایجاد و سپس به برنامه swapon بگوئید که چگونه از آن استفاده کند .
بعنوان مثال برای ایجاد 64 مگابایت فضای swap در پارتیشن ریشه ( / ) از دستور زیر استفاده کنید :
dd if=/dev/zero of=/swapfile bs=1024 count=65536
این دستور یک فایل 64 مگابایتی swap برروی پارتیشن ریشه لینوکس ایجاد میکند و حالا باید آن را با دستورات زیر مقداردهی کنید :
mkswap /swapfile 65536
و سپس شما با فرمان زیرقادر خواهید بود که این فضا را به مجموعه فضای swap مورد استفاده سیستم خود بیافزائید :
بدین وسیله شما 64 مگابایت به فضای swap سیستم خود اضافه کرده اید .
ضمنا فراموش نکنید که دستور آخر یعنی swapon /swapfile را به دستورات موجود در فایل startup سیستم خود بیافزائید تا در هر مورد راه اندازی مجدد سیستم فضای swap file بطور خودکار فعال گردد . مسیر فایل های راه انداز یا استارت آپ سیستم /etc/rc.d/ میباشد و دستور فوق را میتوان به انتهای فایل راه انداز سیستم به نام boot در مسیر زیر اضافه کرد :