واحدة من أسهل الطرق لزيادة استجابة خادومك وجعله قويًا ضدّ أخطاء الذاكرة التي قد تطرأ على تطبيقاتك التي تشغّلها عليه هي عبر إضافة مساحة Swap.
Swap هي مساحة من القرص الصلب يتم تعريفها على أنّها مكان يمكن لنظام التشغيل تخزين البيانات فيها مؤقتًا في حال عدم توفّر مكان لذلك على الذاكرة العشوائية (RAM).
يعطيك هذا القدرة على زيادة كميّة المعلومات التي يمكن لخادومك الاحتفاظ بها في "ذاكرته" ريثما يعمل. سيتم استخدام المساحة من على القرص الصلب مؤقتًا عندما لا يكون هناك مساحة كافية في الذاكرة العشوائية لحفظ البيانات.
المعلومات التي يتم كتابتها على القرص الصلب ستكون أبطء في الاستجابة من تلك الموجودة في الذاكرة العشوائية، ولكنّ نظام التشغيل سيفضّل الإبقاء على بيانات التطبيق العامِلة حاليًا في الذاكرة العشوائية مع استخدام قرص Swap للبيانات الأقدم. بشكلٍ عام، يعتبر امتلاك قرص Swap صمّام أمانٍ فاصل يتم استعماله تلقائيًا عند نضوب الذاكرة العشوائية من خادومك.
في هذا الدرس، سنشرح كيفية إنشاء وتمكين ملفّ swap على توزيعة Ubuntu 14.04.
ملاحظة: على الرغم من أنّ قرص Swap مستحسن للأنظمة التي تستخدم الأقراص الصلبة التقليدية، إلّا أنّ استخدام Swap مع أقراص SSD يمكن أن يسبب مشاكل وتهتّكًا للعتاد مع مرور الوقت. القيام بذلك قد يؤثر على بنية العتاد التحتية التي توفّر الخدمة لك ولجيرانك.
إذا كنت تحتاج تحسين أداء خادومك، فإننا ننصحك بترقيته. سيوفّر لك هذا نتائج أفضل بما يتعلّق بالأداء وسيقلّص من احتمالية حصول مشاكل مع العتاد.
التحقق من معلومات Swap على النظام
قبل أن نبدأ، سنأخذ جولةً على نظام التشغيل الخاصّ بنا لنرى ما إذا كنّا نمتلك بالفعل قرص Swap أم لا. يمكننا امتلاك أكثر من قرص أو ملفّ Swap واحد، ولكن بشكلٍ عام، يجب أن يكون واحد منها كافيًا فقط.
يمكننا رؤية ما إذا كان النظام يمتلك أيّ ملفّات Swap مُعدّة مسبقًا عبر كتابة:
sudo swapon -s
Filename Type Size Used Priority
إذا رأيت فقط ترويسة الجدول، كما رأينا أعلاه، فهذا يعني أنّك لا تمتلك حاليًا أيّ قرص Swap على النظام.
طريقة أخرى للتحقق من مساحة swap هي عبر استخدام الأداة free، والتي تقوم بإظهار استخدام الذاكرة الحالي لنا. يمكننا رؤية نسبة استخدام الذاكرة الحالية و swap محسوبةً بالميغابايت عبر كتابة:
free -m
total used free shared buffers cached
Mem: 3953 154 3799 0 8 83
-/+ buffers/cache: 62 3890
Swap: 0 0 0
كما يمكنك أن ترى، مساحة Swap على نظامنا هي 0. وهذا مطابقٌ لما رأيناه في الأمر السابق.
التحقق من المساحة المتوفرة على القرص الصلب
الطريقة النموذجية لتخصيص المساحة لـ Swap هي عبر استخدام (partition) قسم من القرص الصلب له، ولكنّ التعديل على التقسيم الافتراضي للقرص الصلب ليس دومًا ممكنًا. يمكننا ببساطة إنشاء ملفّ swap عادي ليعمل على قسمٍ موجودٍ بالفعل.
قبل أن نقوم بهذا، يجب أن نعرف حجم المساحة الحرّة المتوفّرة على القرص الصلب. يمكننا الحصول على هذه المعلومات عبر كتابة:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda 59G 1.3G 55G 3% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 2.0G 12K 2.0G 1% /dev
tmpfs 396M 312K 396M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 100M 0 100M 0% /run/user
كما يمكنك أن ترى في السطر الأول، يمتلك القرص الصلب الخاصّ بنا حوالي 55 جيجابايت من المساحة المتوفّرة، لذا فإنّه يوجد لدينا مساحة كبيرة لاستغلالها. هذا طبعًا على خادوم افتراضي خاصّ جديد بحجمٍ متوسّط، قد يكون خادومك مختلفًا تبعًا لاستخداماتك.
على الرغم من أنّه يوجد العديد من الآراء حول الحجم المناسب لملفّ swap، إلّا أنّه يعتمد في الواقع على رغبتك واحتياجات تطبيقاتك. بشكلٍ عام، من المنصوح أن تجعل حجم swap مساويًا أو مضاعفًا لحجم الذاكرة العشوائية (RAM) المتوفّرة على خادومك.
بما أنّ خادومنا يحتوي 4 جيجابايت من الذاكرة العشوائية هنا، وبما أنّ ضعف هذا الرقم سيعطينا ملفّ swap كبير جدًا لن نحتاج بتاتًا لاستخدامه كلّه أو حتّى نصفه، فسنقوم فقط باستخدام 4 جيجابايت من المساحة لملفّ swap.
إنشاء ملف Swap
الآن وبعد أن عرفنا المساحة المتوفّرة على القرص الصلب الخاصّ بنا، يمكننا المضي قدمًا في إنشاء ملفّ swap على نظام الملفّات الخاصّ بنا.
سنقوم بإنشاء ملفّ يدعى swapfile ضمن المسار الجذر (/). يجب أن يكون حجم الملفّ مساويًا لحجم المساحة التي نريد تخصيصها لـ Swap، وهناك طريقتان للقيام بالعملية:
الطريقة التقليدية البطيئة
يمكننا إنشاء ملفّ جديد بحجمٍ معيّن عبر استخدام الأمر dd. تقوم هذه الأداة متعددة الاستخدامات بكتابة البيانات من موقعٍ إلى آخر.
يمكننا أن نستعمل هذه الأداة للقيام بكتابة أصفار إلى ملفّ من جهازٍ خاص في أنظمة لينكس موجود في المسار dev/zero/، يقوم هذا الجهاز فقط بطباعة عددٍ من الأصفار حسب ما يُطلبُ منه.
نقوم بتحديد حجم الملفّ عبر استخدام bs لحجم الكتلة الواحدة (block size) وcount لعدد الكتل (blocks) التي نريد إنشاءها. يمكننا إسناد أيّ قيمة إلى كِلا المُعامِلين، ولكن ما يهم حقًا هو نتيجتهما معًا.
كمثال، في حالتنا نريد إنشاء ملف بحجم 4 جيجابايت. يمكننا القيام بهذا عبر تحديد حجم الكتلة الواحدة بـ 1 جيجابايت وبتحديد عدد الكتل إلى 4:
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
4+0 records in
4+0 records out
4294967296 bytes (4.3 GB) copied, 18.6227 s, 231 MB/s
تحقق من الأمر الذي تريد إدخاله قبل الضغط على زرّ Enter، لأنّ هذا الأمر يمكن أن يقوم بمسح بياناتك في حال قمت بتوجيه of (والذي يرمز إلى output file أو ملف الخرج) إلى المسار الخاطئ.
يمكننا أن نرى أنّه قد تمّ إنشاء الملفّ بحجم 4 جيجابايت عبر كتابة:
ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Apr 28 17:15 /swapfile
إذا قمت بتنفيذ الأمر السابق لإنشاء ملف swap بنجاح، فقد تكون قد لاحظت أنّه أخذ وقتًا ليكتمل، في خادومنا التجريبي، سترى أنّ النظام استغرق 18 ثانية ليقوم بإنشاء الملفّ، لأنّه يجب عليه كتابة 4 جيجابايت من الأصفار إلى ملفّ على القرص الصلب.
إذا كنت تريد معرفة كيفيّة إنشاء الملفّ بشكلٍ أسرع، فقم بحذف الملفّ عبر الأمر أدناه وطبّق الخطوة التالية:
sudo rm /swapfile
الطريقة السريعة
الطريقة الأسرع لإنشاء نفس الملفّ هي عبر استخدام برنامج fallocate. يقوم هذا الأمر بإنشاء ملفّ بحجمٍ معيّن، دون الحاجة إلى كتابة أصفار مثلًا أو محتوىً آخر إليه.
يمكننا إنشاء ملفّ بحجم 4 جيجابايت عبر كتابة:
sudo fallocate -l 4G /swapfile
ستقوم الطرفية بالرجوع إليك في نفس اللحظة تقريبًا. يمكننا التحقق مما إذا كان حجم الملفّ صحيحًا أم لا عبر كتابة الأمر:
ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Apr 28 17:19 /swapfile
وكما ترى، تمّ إنشاء ملفّ Swap الخاصّ بنا بالمساحة المطلوبة بشكلٍ صحيح.
تفعيل ملف Swap
الآن تمّ إنشاء الملفّ، ولكنّ النظام لا يعرف أنّه من المفترض به أن يستخدمه بعد. يجب أن نقوم بإخبار النظام بأن يقوم بتهيئة هذا الملفّ كقرص Swap ومن ثمّ تفعيله.
ولكن قبل أن نقوم بهذا، علينا ضبط صلاحيات الملفّ بحيث لا يكون قابلًا للقراءة لأيّ أحد باستثناء المستخدم الجذر (root). السماح للمستخدمين الآخرين بقراءة أو كتابة محتويات هذا الملفّ قد يكون خطرًا أمنيًا كبيرًا. يمكننا قفل هذه الصلاحيات عبر كتابة:
sudo chmod 600 /swapfile
تحقق الآن من أنّ الملفّ يمتلك الصلاحيات الصحيحة عبر تطبيق:
ls -lh /swapfile
-rw------- 1 root root 4.0G Apr 28 17:19 /swapfile
كما نرى، فقط المستخدم الجذر يمتلك صلاحيات الكتابة والقراءة حاليًا.
الآن وبعد أن أصبح ملفّنا أكثر أمانًا، يمكننا أن نخبر نظامنا بأن يقوم بتهيئته كملفّ swap عبر تنفيذ:
sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944
أصبح الملفّ الآن جاهزًا ليتم استخدامه كمساحة Swap. يمكننا تفعيله عبر الأمر:
sudo swapon /swapfile
يمكننا كذلك اختبار نجاح العملية أو فشلها عبر سؤال النظام الآن عمّا إذا كان يتعرّف على مساحة Swap أم لا عبر كتابة:
sudo swapon -s
Filename Type Size Used Priority
/swapfile file 4194300 0 -1
لدينا ملفّ swap جديد هنا. يمكننا أيضًا استخدام أداة free للتأكّد مما وجدناه:
free -m
total used free shared buffers cached
Mem: 3953 101 3851 0 5 30
-/+ buffers/cache: 66 3887
Swap: 4095 0 4095
تمّ الآن إعداد swap بنجاح، وسيقوم النظام باستخدامه عندما يحتاجه فقط.
استخدام ملف Swap بشكل دائم
لقد قمنا بتفعيل ملفّ Swap الآن، ولكن عندما نقوم بإعادة التشغيل، فإنّ الخادوم لن يقوم تلقائيًا بإعادة تفعيل الملفّ. يمكننا تغيير هذا عبر تعديل ملفّ fstab.
قم بتعديل الملفّ بصلاحيات الجذر باستخدام محرر نصوصك المفضّل:
sudo nano /etc/fstab
في نهاية ملفّك، تحتاج إلى إضافة سطرٍ يخبر نظام التشغيل أن يقوم باستخدام الملفّ الذي أنشأته تلقائيًا:
/swapfile none swap sw 0 0
احفظ الملفّ واخرج عندما تنتهي.
اضبط إعدادات Swap الخاصة بك
هناك بعض الخيارات المؤثّرة على أداء خادومك التي يمكنك ضبطها وتعديلها للحصول على أداءٍ أفضل عند التعامل مع swap.
يقوم مُعامِل swappiness بإعداد معدّل تكرار النظام للقيام بعملية نقل البيانات من الذاكرة العشوائية إلى ملفّ swap، وهذه القيمة محصورة بين الـ0 والـ100 وتمثّل نسبةً مئوية.
عندما تكون القيمة أقرب إلى الصفر، فإنّ النظام لن يقوم بنقل أيّ بيانات من الذاكرة العشوائية إلى swap إلّا في حال الضرورة القصوى. تذكّر أنّ التعامل مع swap "مكلف" حيث أنّه بطيء بشكلٍ ملحوظ مقارنةً بالذاكرة العشوائية مما يسبب بطئًا في الأداء. لذا فإنّ إخبار النظام بألّا يقوم بالاعتماد على swap كثيرًا سيقوم بتسريع أداء نظامك بشكلٍ عام.
إذا كانت القيمة أقرب إلى المئة، فإنّ النظام سيقوم بنقل المزيد من البيانات إلى swap بهدف حفظ المزيد من الذاكرة العشوائية. اعتمادًا على ماهيّة التطبيقات التي تقوم بتشغيلها على خادومك واحتياجاتك الشخصية، قد يكون هذا الخيار أفضل لك في بعض الحالات.
يمكننا أن نرى قيمة مُعامِل swappiness الحالية عبر تطبيق:
cat /proc/sys/vm/swappiness
60
بالنسبة لجهاز سطح مكتب (استخدام عادي)، فإنّ قيمة 60 ليست سيئة. ولكن بالنسبة إلى خادوم، فإننا قد نود تقريب القيمة إلى الصفر.
يمكننا تغيير قيمة swappiness إلى قيمة أخرى عبر استخدام الأمر sysctl.
كمثال، لتغيير قيمة swappiness إلى 10، يمكننا تنفيذ:
sudo sysctl vm.swappiness=10
vm.swappiness = 10
سيستمر هذا التغيير إلى حين عملية إعادة التشغيل المقبلة. يمكننا جعل هذا التغيير دائمًا حتّى بعد إعادة التشغيل عبر إضافة سطرٍ معيّن إلى نهاية ملفّ etc/sysctl.conf/:
sudo nano /etc/sysctl.conf
في نهاية الملفّ أضف:
vm.swappiness=10
احفظ الملفّ واخرج عندما تنتهي.
قيمة أخرى مرتبطة قد تودّ تغييرها هي vfs_cache_pressure. يقوم هذا المُعامِل بتحديد إلى أيّ مدى سيقوم النظام بالاحتفاظ بالخبيئة (cache) للبيانات الأكثر تكرارًا في مقابل البيانات الأخرى.
تكون هذه البيانات عادةً متعلقة بنظام الملفّات نفسه، وغالبًا ما يتكرر طلبها، لذلك فإنّه من الممتاز لنظامك أن يقوم بالاحتفاظ بهذه البيانات في ذاكرته المؤقتة. يمكنك رؤية قيمة هذا المُعامِل الحالية عبر الأمر:
cat /proc/sys/vm/vfs_cache_pressure
100
حاليًا، يقوم نظامنا بحذف البيانات والمعلومات من الخبيئة (cache) بسرعة سريعة جدًا. يمكننا جعل هذه العملية أكثر بطئًا عبر استخدام قيمة كـ50:
sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50
مرةً أخرى.. هذه القيمة ليست دائمة حاليًا وسيتم فقدانها عند إعادة التشغيل، يمكننا تغيير هذا الوضع عبر إضافتها إلى ملفّات إعداداتنا كما فعلنا مسبقًا:
sudo nano /etc/sysctl.conf
في نهاية الملفّ، أضف القيمة التي تريدها:
vm.vfs_cache_pressure = 50
احفظ الملفّ واخرج عندما تنتهي.
الخاتمة
اتبّاع الخطوات في هذا الدرس سيعطيك بعض الهواء لتتنفسه عندما يتعلّق الأمر باستخدام الذاكرة العشوائية في نظامك. مساحة Swap مفيدة بشكلٍ لا يصدّق في تفادي بعض المشاكل الشائعة.
إذا كنت تصادف أخطاء (OOM (Out of memory أو عدم توفّر الذاكرة بشكلٍ شائع، أو إذا كنت ترى أنّ نظامك غير قادر على استخدام التطبيقات التي تحتاجها، فإنّ الحلّ الأفضل لك هو في ضبط إعدادات تطبيقاتك أو في ترقية موارد خادومك، كما أنّ تفعيل مساحة Swap على خادومك سيعطيه المزيد من المرونة ويوفّر لك المزيد من الوقت على خادومٍ بمواصفاتٍ عادية.
ترجمة -وبتصرف- للمقال How To Add Swap on Ubuntu 14.04 لصاحبه Justin Ellingwood.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.