بازدیدها: ۱۲۹۸

سیستم عامل برای آن‌که قادر به اجرای برنامه‌ای باشد، بایستی آن را به داخل حافظه اصلی (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، می­‌توان تنظیمات مختلفی در پارامترهای زیر انجام داد:

  1. swappiness
  2. min_free_kbytes
  3. 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 تنظیم نمایید.