كيفية إضافة مساحة تبادل على Ubuntu 22.04

مقدمة

طريقة واحدة للوقاية من أخطاء نفاد الذاكرة في التطبيقات هي إضافة بعض مساحة التبادل إلى خادمك. في هذا الدليل، سنغطي كيفية إضافة ملف تبادل إلى خادم Ubuntu 22.04.

ما هو التبادل؟

التبادل هو جزء من تخزين القرص الصلب تم تخصيصه لنظام التشغيل لتخزين البيانات مؤقتًا التي لم يعد بإمكانه الاحتفاظ بها في الذاكرة العشوائية. يتيح لك هذا زيادة كمية المعلومات التي يمكن لخادمك الاحتفاظ بها في ذاكرته العملية، مع بعض التحفظات. سيتم استخدام مساحة التبادل على القرص الصلب بشكل رئيسي عندما لا يكون هناك مساحة كافية في الذاكرة العشوائية لاحتواء بيانات التطبيقات القيدة في الاستخدام.

سيكون كتابة المعلومات على القرص أبطأ بشكل ملحوظ من المعلومات المحتفظ بها في الذاكرة العشوائية، ولكن سيفضل نظام التشغيل الاحتفاظ ببيانات التطبيقات الجارية في الذاكرة واستخدام التبادل للبيانات القديمة. بشكل عام، وجود مساحة تبادل كبديل لعندما ينفد ذاكرة النظام يمكن أن يكون شبك أمان جيد ضد الاستثناءات نفاد الذاكرة على الأنظمة ذات التخزين غير الفلاش الصلب.

الخطوة 1 – التحقق من معلومات التبادل في النظام

قبل أن نبدأ، يمكننا التحقق مما إذا كان لدى النظام بالفعل بعض مساحة التبادل المتاحة. يُمكن أن يكون هناك ملفات تبادل متعددة أو أقسام تبادل، ولكن بشكل عام يجب أن يكون واحدًا كافيًا.

يُمكننا التحقق مما إذا كان لديك النظام أي تبادل مكون عن طريق كتابة:

  1. sudo swapon --show

إذا لم يتم استرداد أي نتائج، فهذا يعني أن نظامك ليس لديه حاليًا مساحة تبادل متاحة.

يمكنك التحقق من عدم وجود تبادل نشط باستخدام أداة free:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

كما يمكنك رؤية في صف الـتبادل من الإخراج، لا يوجد أي تبادل نشط في النظام.

الخطوة 2 – التحقق من المساحة المتاحة في قسم القرص الصلب

قبل أن نقوم بإنشاء ملف التبادل، سنقوم بالتحقق من استخدام القرص الحالي لدينا للتأكد من وجود ما يكفي من المساحة. يمكنك القيام بذلك عن طريق إدخال:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 932K 98M 1% /run /dev/vda1 25G 1.4G 23G 7% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi /dev/loop0 55M 55M 0 100% /snap/core18/1705 /dev/loop1 69M 69M 0 100% /snap/lxd/14804 /dev/loop2 28M 28M 0 100% /snap/snapd/7264 tmpfs 99M 0 99M 0% /run/user/1000

الجهاز الذي يحتوي على / في عمود Mounted on هو قرصنا في هذه الحالة. لدينا الكثير من المساحة المتاحة في هذا المثال (تم استخدام 1.4 جيجابايت فقط). قد تكون نسبة الاستخدام لديك مختلفة على الأرجح.

على الرغم من وجود العديد من الآراء حول الحجم المناسب لمساحة التبديل، فإن ذلك يعتمد حقًا على تفضيلاتك الشخصية ومتطلبات تطبيقك. بشكل عام، يعتبر المبلغ المساوي أو مضاعف مقدار الذاكرة العشوائية على نظامك نقطة بداية جيدة. قاعدة أخرى جيدة تقول أن أي شيء يزيد عن 4 جيجابايت من المساحة المتبادلة على الأرجح غير ضروري إذا كنت تستخدمه فقط كنسخة احتياطية للذاكرة العشوائية.

الخطوة 3 – إنشاء ملف تبديل

الآن بمعرفة مساحة القرص الصلب المتاحة لدينا، يمكننا إنشاء ملف تبديل على نظام الملفات الخاص بنا. سنخصص ملفًا بالحجم الذي نريده يُسمى swapfile في دليل الجذر (/) لدينا.

أفضل طريقة لإنشاء ملف تبديل هي باستخدام برنامج fallocate. هذا الأمر ينشئ فورًا ملف بالحجم المحدد.

نظرًا لأن الخادم في مثالنا يحتوي على 1 جيجابايت من الذاكرة العشوائية، سنقوم بإنشاء ملف بحجم 1 جيجابايت في هذا الدليل. قم بتعديل هذا حسب احتياجات خادمك الخاص:

  1. sudo fallocate -l 1G /swapfile

يمكننا التحقق من أن المبلغ الصحيح من المساحة تم حجزه من خلال كتابة:

  1. ls -lh /swapfile
  1. -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

تم إنشاء ملفنا بالحجم الصحيح تم تخصيصه.

الخطوة 4 – تمكين ملف التبديل

الآن بعد أن لدينا ملف بالحجم الصحيح متاحًا، نحتاج إلى تحويل ذلك فعليًا إلى مساحة تبديل.

أولاً، نحتاج إلى قفل أذونات الملف بحيث يمكن للمستخدمين العاديين فقط بامتيازات root قراءة المحتويات. يمنع ذلك المستخدمين العاديين من الوصول إلى الملف، مما قد يكون له تداعيات أمنية كبيرة.

قم بجعل الملف متاحًا فقط للمستخدم root عن طريق كتابة:

  1. sudo chmod 600 /swapfile

تحقق من تغيير الأذونات عن طريق كتابة:

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

كما يمكنك رؤية، فقط المستخدم root لديه الإذن بالقراءة والكتابة ممكَّنًا.

يمكننا الآن تحديد الملف كمساحة تبديل عن طريق كتابة:

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

بعد تحديد الملف، يمكننا تمكين ملف التبديل، مما يسمح لنظامنا باستخدامه:

  1. sudo swapon /swapfile

تحقق من توافر مساحة التبديل عن طريق كتابة:

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

يمكننا التحقق من إخراج أداة free مرة أخرى لتأكيد نتائجنا:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi

تم تهيئة مساحة التبديل بنجاح وسيبدأ نظام التشغيل لدينا في استخدامه حسب الحاجة.

الخطوة 5 – جعل ملف التبديل دائمًا

قامت التغييرات الأخيرة بتمكين ملف التبديل للجلسة الحالية. ومع ذلك، إذا قمنا بإعادة التشغيل، فلن يحتفظ الخادم بإعدادات التبديل تلقائيًا. يمكننا تغيير ذلك عن طريق إضافة ملف التبديل إلى ملفنا /etc/fstab.

قم بنسخ ملف /etc/fstab احتياطيًا في حالة حدوث أي مشكلة:

  1. sudo cp /etc/fstab /etc/fstab.bak

أضف معلومات ملف التبادل إلى نهاية ملف /etc/fstab الخاص بك عن طريق كتابة:

  1. echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

سنقوم بمراجعة بعض الإعدادات التي يمكننا تحديثها لضبط مساحة التبادل الخاصة بنا.

الخطوة 6 – ضبط إعدادات التبادل الخاصة بك

هناك بعض الخيارات التي يمكنك تكوينها والتي ستؤثر على أداء نظامك عند التعامل مع التبادل.

ضبط خاصية السوابنيس

يقوم المعلمة swappiness بتكوين تردد تبديل البيانات من الذاكرة العشوائية إلى مساحة التبادل. هذه قيمة بين 0 و 100 تمثل نسبة.

مع القيم القريبة من الصفر، لن يقوم النواة بتبديل البيانات إلى القرص ما لم يكن ذلك ضروريًا تمامًا. تذكر، أن التفاعلات مع ملف التبادل تكلفة عالية بحيث تستغرق وقتًا أطول بكثير من التفاعلات مع الذاكرة العشوائية ويمكن أن تتسبب في تقليل كبير في الأداء. إخبار النظام بعدم الاعتماد على التبادل كثيرًا عمومًا سيجعل نظامك أسرع.

القيم التي تقترب من 100 ستحاول وضع المزيد من البيانات في مساحة التبادل في محاولة للحفاظ على المزيد من مساحة الذاكرة العشوائية متاحة. اعتمادًا على ملف تعريف الذاكرة لتطبيقاتك أو على ما تستخدمه الخادم لديك ل، قد يكون هذا أفضل في بعض الحالات.

يمكننا رؤية قيمة swappiness الحالية عن طريق كتابة:

  1. cat /proc/sys/vm/swappiness
Output
60

بالنسبة لسطح المكتب، قيمة swappiness 60 ليست قيمة سيئة. بالنسبة لخادم، قد ترغب في تحريكها إلى قرب 0.

يمكننا تعيين swappiness إلى قيمة مختلفة باستخدام أمر sysctl.

على سبيل المثال، لتعيين swappiness إلى 10، يمكننا كتابة:

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

هذا الإعداد سيستمر حتى إعادة التشغيل التالية. يمكننا ضبط هذه القيمة تلقائيًا عند إعادة التشغيل بإضافة السطر إلى ملف /etc/sysctl.conf:

  1. sudo nano /etc/sysctl.conf

في الأسفل، يمكنك إضافة:

/etc/sysctl.conf
vm.swappiness=10

احفظ وأغلق الملف عند الانتهاء.

ضبط إعداد ضغط الذاكرة المؤقتة

قيمة ذات صلة أخرى قد ترغب في تعديلها هي vfs_cache_pressure. هذا الإعداد يُكوّن كم سيختار النظام لتخزين معلومات الـinode والـdentry عن بيانات أخرى.

أساسًا، هذه البيانات عبارة عن بيانات الوصول إلى نظام الملفات. هذا عمومًا مكلف للغاية للبحث عنه ويُطلب بشكل متكرر للغاية، لذا فهو شيء ممتاز لنظامك لتخزينه. يمكنك رؤية القيمة الحالية عن طريق الاستعلام في نظام الملفات proc مرة أخرى:

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

حيث أن النظام مُعين حاليًا بشكل يزيل معلومات inode من الذاكرة المؤقتة بسرعة كبيرة. يمكننا تعيين هذا إلى إعداد أكثر حرصًا مثل 50 بكتابة:

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

مرة أخرى، هذا صالح فقط لجلسةنا الحالية. يمكننا تغيير ذلك عن طريق إضافته إلى ملف التكوين الخاص بنا مثلما فعلنا مع إعداد swappiness الخاص بنا:

  1. sudo nano /etc/sysctl.conf

في الأسفل، أضف السطر الذي يحدد قيمتك الجديدة:

/etc/sysctl.conf
vm.vfs_cache_pressure=50

احفظ وأغلق الملف عند الانتهاء.

الاستنتاج

اتباع الخطوات في هذا الدليل سيمنحك بعض الهواء في الحالات التي من شأنها أن تؤدي في غيرها إلى استثناءات نفاد الذاكرة. يمكن أن تكون مساحة التبادل مفيدة للغاية في تجنب بعض هذه المشاكل الشائعة.

إذا كنت تصادف أخطاء النفاد من الذاكرة (OOM)، أو إذا وجدت أن نظامك غير قادر على استخدام التطبيقات التي تحتاج إليها، فإن الحل الأفضل هو تحسين إعدادات التطبيقات الخاصة بك أو ترقية الخادم الخاص بك.

Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04