إخلاء الذاكرة المحفوظة للـ vps

يقوم نظام Linux افتراضيًا بحجز جزء من الذاكرة لـ kdump، ويتم ضبط حجم هذه الذاكرة من خلال معلمة crashkernel. غالبًا لا يواجه مطورو التطبيقات عمومًا انهيار نواة النظام، ويمكن تحرير هذه الذاكرة من خلال تعديل ملف /etc/default/grub.

إذا لم تكن بحاجة إلى kdump، يمكن ضبط معلمة crashkernel إلى 0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M، مما يحرر جزءًا من الذاكرة.

طريقة العرض: cat /etc/default/grub

القيمة الافتراضية كالتالي:

GRUB_CMDLINE_LINUX=" vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 iommu=pt crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M crash_kexec_post_notifiers=1"

شرح حقل crashkernel: يعني أن主机 ذاكرة 0-1G تحجز 0M ذاكرة،主机 ذاكرة 1-4G تحجز 192M ذاكرة،主机 ذاكرة 4-128G تحجز 384M ذاكرة،主机 ذاكرة أكثر من 128G تحجز 512M ذاكرة.

يتم ترتيب主机 ذاكرة 1G إلى الفئة 1-4G لأعلى، ويتم حجز 192MB ذاكرة لـ kdump. يتم ترتيب主机 ذاكرة 4G إلى الفئة 4-128G لأعلى، ويتم حجز 384MB ذاكرة لـ kdump.

طريقة التعديل: sudo sed -i 's/crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M/crashkernel=0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M/' /etc/default/grub

إعادة التشغيل لتفعيل: sudo update-grub && sudo reboot

بأخذ مثال vps شائع للطلاب الجدد من نوع 2C1G، الفرق في مساحة الذاكرة قبل وبعد التعديل على نظام نظيف كما يلي، يمكن رؤية الفرق الكبير بين 366MB و 562MB.

# قبل التعديل
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          707180      340772      123400        2624      358872      366408
Swap:              0           0           0

# بعد التعديل
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          903788      341656      451380        2616      251032      562132
Swap:              0           0           0

مساحة الذاكرة لـ vps من نوع 2C4G قبل وبعد التعديل كما يلي، الفرق بين 3.1GB و 3.5GB.

# قبل التعديل
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3512696      377672     2870944        1260      415116     3135024
Swap:              0           0           0

# بعد التعديل
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3905912      374468     3408304        1252      270508     3531444
Swap:              0           0           0

المزيد حول kdump

Kdump هو آلية تصدير للنواة المنهارة، وتُستخدم لالتقاط حالة الذاكرة للنظام عند انهيار نواة Linux. تعتمد على تقنية kexec، حيث تسمح kexec لنواة Linux بتشغيل نواة Linux أخرى دون المرور بعملية تهيئة BIOS، مما يسمح للنظام بالانتقال بسرعة إلى نواة جديدة (تُعرف أيضًا بالنواة الملتقطة أو crashkernel) بعد الانهيار.

عندما يواجه النظام خطأً قاتلاً ويؤدي إلى خطأ النواة (kernel panic)، تقوم النواة الحالية (تُعرف أيضًا بالنواة الرئيسية) باستخدام kexec لتحميل نواة ملتقطة مُعدة مسبقًا، وتُحفظ حالة الذاكرة للنظام إلى موقع محدد، مثل قسم مخصص على القرص أو عبر الشبكة إلى جهاز آخر. يمكن استخدام ملف صورة الذاكرة المحفوظة هذا (vmcore أو ملف kdump) للتحليل اللاحق، لمساعدة المطورين أو مسؤولي النظام في تحديد سبب الانهيار.

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