بازدیدها: ۱۵۶۱
سیستم عامل برای آنکه قادر به اجرای برنامهای باشد، بایستی آن را به داخل حافظه اصلی (RAM) منتقل نماید. درسیستمهای عامل امروزی علاوه بر آنکه در هر لحظه تعداد زیادی برنامه در حال اجرا هستند، تعداد زیادی سرویس نیز در پس زمینه در حال فعالیت است. با توجه به محدود بودن میزان حافظهی سیستم، در صورت بالا رفتن تعداد برنامههای در حال اجرا به صورت همزمان، مقدار حافظه لازم جهت اجرای همزمان برنامهها از کل حافظه اصلی کامپیوتر بیشتر میشود و در این حالت سیستم دچار کمبود حافظه اصلی شده و در نهایت از کار خواهد افتاد (crash میکند).
به منظور حل این مسئله دو راه حل وجود دارد:
- راه حل اول: افزایش مقدار حافظه اصلی کامپیوتر است که البته این راه حل دارای مشکلاتی است که از جملهی آنها میتوان به گران بودن هزینهی خرید RAM و دیگری محدود بودن مقدار حافظهی قابل آدرسدهی در RAM اشاره نمود.
- راه حل دوم: استفاده از بخشی از فضای دیسک به عنوان حافظهی مجازی که اصطلاحا به این فضا در سیستمهای عامل خانوادهی لینوکس و یونیکس فضای swap گفته میشود. فضای swap را میتوان به دو صورت پارتیشن و فایل تعریف کرد.
ساخت و اضافه کردن swap در لینوکس
به عنوان یک مدیر سیستم لازم است که در صورت نیاز فضای swap بیشتری را بعد از نصب بر روی سرور اضافه کنید. swap اجازه میدهد که لینوکس از هارد دیسک برای افزایش حافظه مجازی استفاده کند.
حافظهی مجازی = RAM + فضای SWAP
زمانی که لینوکس بر روی RAM اجرا میشود، بخشی از RAM را به فضای دیسک (فضای swap) منتقل میکند و فضای حافظه را برای سایر برنامهها آزاد مینماید. سپس زمانی که شما به برنامه نیاز دارید، کرنل، برنامه را از فضای swap منتقل میکند و مکان آن را با سایر برنامههای درون RAM جابجا میکند.
روش اضافه کردن یک فایل swap بر روی لینوکس
برنامه ترمینال را باز کنید یا از کلاینت ssh برای دسترسی راه دور به سرور استفاده کنید. با استفاده از فرمان زیر به عنوان کاربر root وارد شوید:
sudo -s
سپس برای ایجاد swap با میزان فضای مورد نظر (در این مثال 2 گیگابایت است) فرمان زیر را اجرا نمایید:
# dd if=/dev/zero of=/swapfile bs=1G count=2
نمونهای از خروجی:
۲+۰ records in
۲+۰ records out
۲۱۴۷۴۸۳۶۴۸ bytes (2.1 GB) copied, 20.2256 s, 106 MB/s
با استفاده از دستور زیر بررسی کنید که فایل بر روی سرور ایجاد شده است:
# ls -lh /swapfile
نمونهای از خروجی:
rw-r–r– 1 root root 2.0G Jun 16 14:07 /swapfile-
ایجاد فضای swap با استفاده از فرمان fallocate به جای فرمان dd
به جای استفاده از فرمان dd، میتوان از دستور fallocate برای ایجاد swap استفاده کرد. مانند زیر:
# fallocate -l 2G /swapfile-1
# ls -lh /swapfile-1
نمونه ای از خروجی:
rw-r–r– 1 root root 2.0G Jun 1614:11 /swapfile-1-
امن سازی فایل swap
به منظور انجام تنظیمات مناسب جهت تخصیص مجوزهای دسترسی و در نهایت تامین بخشی از امنیت لازم میتوان از دستورات chmod و chown استفاده نمود:
# chown root:root /swapfile
# chmod 0600 /swapfile
# ls -lh /swapfile
نمونه ای از خروجی:
rw——- 1 root root 2.0G Oct 29 14:07 /swapfile-
در صورتی که امکان خواندن فایل swap توسط کاربری غیر از کاربر ریشه نیز وجود داشته باشد، یک آسیبپذیری بزرگ تلقی میشود. دستورات بالا تضمین میکنند که تنها کاربر root قادر به خواندن و نوشتن در فایل swap است.
فعال کردن فایل swap
برای فعال کردن swap ابتدا دستور mkswap را مانند زیر برای فعالسازی در سیستمعامل اجرا کنید:
# mkswap /swapfile
و در نهایت swap را فعال نمایید:
swapon /swapfile#
بررسی swap و تنظیمات مورد نیاز در سیستمعامل
دستور زیر را وارد کنید:
# swapon –s
نمونه ای از خروجی:
Filename Type Size Used Priority
dev/sda8 partition 3998716 3014 -1/
swapfile file 2097148 0 -2/
برخی از دستورات دیگر که میتوان به منظور بررسی swap از آنها استفاده کرد عبارتند از:
grep -i –color swap /proc/meminfo#
top#
htop#
atop#
چگونه میتوان فایل swap را بر روی سیستمعامل غیر فعال کرد؟
اجرای دستورات زیر برای غیرفعالسازی swap در سیستمعامل کافی است:
swapoff /swapfile#
swapon -s#
به روزرسانی فایل /etc/fstab
ابتدا باید اطمینان حاصل شود که swap بعد از راه اندازی مجدد لینوکس، به صورت خودکار فعال میشود. بنابراین فایل /etc/fstab را ویرایش کرده و دستور زیر را وارد نمایید:
# vi /etc/fstab
سپس خط زیر را اضافه کنید:
swapfile none swap sw 0 0/
و در نهایت با زدن کلیدهای :wq فایل fstab را ذخیره و از آن خارج شوید.
تنظیم فایل swap برای بهینهسازی حافظهی مجازی
به منظور بهینهسازی swap، میتوان تنظیمات مختلفی در پارامترهای زیر انجام داد:
- swappiness
- min_free_kbytes
- vfs_cache_pressure
با تنظیم swappiness به کرنل سیستم خواهیم گفت که در چه مواقعی ازswap ساخته شده استفاده کند که با عددی مابین ۰ تا ۱۰۰ تنظیم میشود. به منظور تنظیم نمودن swappiness در کرنل میتوان یکی از دو روش زیر را انجام داد:
# sysctl vm.swappiness=VALUE
# sysctl vm.swappiness=20
یا
# echo VALUE > /proc/sys/vm/swappiness
# echo 30 > /proc/sys/vm/swappiness
مقدار تعریف شده در فایل swappiness در مسیر /proc/sys/vm/ میزان شدت تاثیرگذاری کرنل در انتقال صفحات حافظه را کنترل میکند. هر چه مقدار تعریف شده بیشتر باشد میزان و شدت تاثیرگذاری را افزایش میدهد و متقابلاً مقادیر پایینتر، شدت تاثیر را کاهش میدهد. مقدار پیش فرض ۶۰ است. برای ایجاد تغییرات به صورت دائمی میتوان خط زیر را در فایل /etc/sysctl.conf اضافه نمود:
echo ‘vm.swappiness=30’ >> /etc/sysctl.conf
پیشنهاد میشود برای سرویسدهندههای پایگاه داده مانند Oracle یا MySQL مقدار ۱۰ را در پارامتر swappiness تنظیم نمایید.