- يستخدم نظام لينكس كل ذاكرة الوصول العشوائي المتاحة للتخزين المؤقت وذاكرة التخزين المؤقت للصفحات، لذا فإن قلة الذاكرة الحرة لا تعني بالضرورة وجود مشكلة.
- إن الجمع بين swap و zram/zswap والإعداد المناسب لـ vm.swappiness يسمح لك بتحقيق التوازن بين الأداء والاستقرار.
- توفر cgroup v2 و systemd-oomd وأدوات مثل earlyoom أو nohang تحكمًا دقيقًا في ضغط الذاكرة وأحداث نفاد الذاكرة.
- تعتبر المراقبة باستخدام free أو vmstat أو htop أو sar أو Glances أمرًا أساسيًا لاكتشاف الاختناقات وتحسين إدارة الذاكرة.

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

قبل العبث بمعلمات النواة أو تركيب zram كما لو لم يكن هناك غد، من الجيد أن يكون لديك بعض الأفكار الواضحة حول أنواع الذاكرة، والبنية، وكيف يرى النظام ذاكرة الوصول العشوائي (RAM).
يُحدد نظام التشغيل وبنية المعالج الحد الأقصى لسعة الذاكرة الفعلية التي يمكن للحاسوب استيعابها. عادةً ما يقتصر نظام 32 بت على 4 جيجابايت من ذاكرة الوصول العشوائي (RAM)، بينما يستطيع نظام 64 بت استيعاب عشرات أو مئات الجيجابايت بسهولة (نظريًا، أكثر من ذلك بكثير، على الرغم من أن الحد الفعلي يفرضه العتاد).
في نظام لينكس، تُدار جميع الذاكرة كذاكرة افتراضية . يشمل ذلك كلاً من ذاكرة الوصول العشوائي (RAM) الفعلية ومساحة التبديل. لا يمكن "توسيع" ذاكرة الوصول العشوائي (RAM) إلا بإضافة وحدات فعلية، ولكن يمكن توسيع الذاكرة الافتراضية باستخدام القرص (الأقسام أو ملفات التبديل) وآليات متقدمة مثل zram أو zswap.
La الذاكرة الفعلية (RAM) إنها الموارد السريعة والمكلفة: حيث تُحمّل العمليات والمكتبات وذاكرة التخزين المؤقت للملفات ومخازن الإدخال/الإخراج والذاكرة المشتركة، وما إلى ذلك. لدى لينكس فلسفة واضحة جدًا: إذا كانت هناك ذاكرة وصول عشوائي (RAM) متاحة، فمن الأفضل استخدامها كذاكرة تخزين مؤقت وتسريع الوصول إليها بدلًا من تركها فارغة. لهذا السبب نرى القليل من الذاكرة "المتاحة" في أدوات مثل free هذا لا يعني أن لديك مشكلة.
ذاكرة القرص ( التخزين الدائم) أبطأ بكثير. فبينما تستجيب ذاكرة الوصول العشوائي (RAM) بالنانو ثانية، حتى محركات الأقراص الصلبة (SSD) تستجيب بالمايكرو ثانية أو الميلي ثانية. لهذا السبب، يحاول النظام الاحتفاظ بالبيانات المستخدمة بكثرة في ذاكرة الوصول العشوائي، ولا يلجأ إلى القرص إلا عند الضرورة القصوى: كتحميل الملفات التنفيذية، أو قراءة البيانات غير المستخدمة بكثرة، أو تبديل الصفحات.
الذاكرة الافتراضية والصفحات وهياكل النواة الداخلية
الذاكرة الافتراضية هي الآلية التي يوفر بها نظام لينكس لكل عملية مساحة عناوين معزولة ومحمية خاصة بها . يقوم كل من الجهاز ونواة النظام بترجمة العناوين الافتراضية إلى عناوين فعلية من خلال هياكل تسمى جداول الصفحات.
أصغر وحدة تُستخدم لإدارة الذاكرة هي الصفحة ، وعادةً ما تكون بحجم 4 كيلوبايت. يدور نظام الذاكرة الافتراضية بأكمله حول الصفحات: يتم تخصيصها وتحريرها وتبديلها وتخزينها مؤقتًا ووضع علامات عليها بأذونات مختلفة (للقراءة فقط، والتنفيذ، وما إلى ذلك).
جداول الصفحات هي هياكل هرمية يحتفظ بها نظام التشغيل. تخزن هذه الجداول، لكل صفحة افتراضية لكل عملية، موقع الصفحة الفعلية (إن وجدت)، وصلاحياتها، وحالتها الراهنة. يتيح هذا الربط عزل العمليات، ومشاركة الصفحات فيما بينها، وربط الملفات مباشرةً بالذاكرة.
عندما يحاول أحد العمليات الوصول إلى عنوان صالح، ولكن الصفحة غير جاهزة للوصول، يحدث خطأ في الصفحة . قد يكون هذا الخطأ بسيطًا (الصفحة موجودة في ذاكرة الوصول العشوائي ولكنها في حالة تتطلب التحديث) أو مكلفًا (الصفحة موجودة على القرص، أو في مساحة التبادل، أو في ملف، ويجب جلبها إلى ذاكرة الوصول العشوائي). إذا تكررت أخطاء الصفحات، يتباطأ النظام لأنه يقضي وقتًا طويلًا جدًا في القراءة من القرص.
ذاكرة التخزين المؤقت للصفحات هي ذاكرة تخزين مؤقتة لصفحات الملفات يحتفظ بها نظام التشغيل. تخزن هذه الذاكرة البيانات والبيانات الوصفية للملفات والمجلدات لتقليل الوصول إلى القرص. وهذا أحد أسباب استخدام نظام لينكس لكامل ذاكرة الوصول العشوائي (RAM) ظاهريًا: في الواقع، هو يستغل الذاكرة التي لا تستخدمها التطبيقات بشكل فعلي لتسريع الوصول إلى القرص.
أنواع الذاكرة: الذاكرة المدعومة بالملفات، والذاكرة المجهولة، وكيفية ارتباطها بذاكرة التبديل.
في نظام لينكس، يُفرّق عادةً بين ذاكرة الملفات والذاكرة المجهولة . كلاهما موجود في ذاكرة الوصول العشوائي (RAM)، لكن أصلهما وإمكانية نسخهما احتياطياً إلى القرص يختلفان.
الدعوة ذاكرة الملفات وهو الملف الذي يتم نسخه احتياطيًا بواسطة ملفات النظام: الملفات التنفيذية، والمكتبات المشتركة، والبيانات المُرتبطة بـ mmap من ملف، وما إلى ذلك. يمكن التخلص من تلك الذاكرة وإعادة تحميلها من الملف الأصلي إذا كانت هناك حاجة إلى مساحة.
La ذاكرة مجهولة يشمل ذلك كل ما يحتفظ به البرنامج ولا يرتبط بملف: الكومة الديناميكية، والمكدس، والمناطق الخاصة بـ MAP_ANONYMOUSوالمناطق التي يتم نسخها بواسطة النسخ عند الكتابة عند القيام بذلك fork()لا توجد هذه الذاكرة إلا في ذاكرة الوصول العشوائي (أو في مساحة التبديل، إذا تم نقلها) ونسختها الاحتياطية الوحيدة الممكنة هي مساحة التبديل هذه تحديدًا.
عندما يحتاج نظام التشغيل إلى تحرير ذاكرة الوصول العشوائي (RAM)، فإنه يحاول أولاً تحرير الصفحات التي يمكنه إعادة تجميعها، وعادةً ما تكون هذه الصفحات من ذاكرة التخزين المؤقت للصفحات أو المناطق المدعومة بالملفات. فقط عندما لا تتوفر مساحة كافية أو عندما يكون ضغط الذاكرة مرتفعًا للغاية، يبدأ النظام في استخدام الذاكرة المجهولة في مساحة التبديل (swap) ، وهي عملية أكثر تكلفة ولكنها تمنح النظام فترة راحة.
ضغط الذاكرة، والتخبط، وقاتل نفاد الذاكرة
يحدث ضغط الذاكرة عندما ينخفض عدد الصفحات الحرة عن عتبات داخلية معينة. عندها يُجبر نظام التشغيل على العمل باستمرار لتحرير الذاكرة: مسح ذاكرة التخزين المؤقت، وكتابة الصفحات غير المستخدمة إلى القرص، وإخراج الصفحات قليلة الاستخدام، وما إلى ذلك.
يمكن أن يؤدي الضغط العالي على الذاكرة إلى ظهور أعراض واضحة للغاية: زمن استجابة عالٍ في خدمات الويب ، وواجهات رسومية بطيئة، واستجابات متأخرة من الجلسات البعيدة (SSH، VNC، RDP)، وحركة مؤشر الماوس غير المنتظمة، ونوافذ تستغرق ثوانٍ للاستجابة، وما إلى ذلك. عند هذه النقطة، يكون النظام أكثر تركيزًا على البقاء على قيد الحياة بدلاً من القيام بعمل مفيد.
يحدث التبديل المفرط عندما لا تكفي ذاكرة الوصول العشوائي (RAM) لتخزين الصفحات التي تستخدمها العمليات باستمرار. يبدأ نظام التشغيل بتبديل الصفحات بشكل متواصل: يُخرج صفحة لإدخال أخرى، ثم يحتاج فورًا إلى الصفحة التي أخرجها للتو. والنتيجة هي حلقة مفرغة من أخطاء الصفحات وعمليات الوصول إلى القرص، مما يؤدي إلى تدهور الأداء.
مع تفعيل خاصية التبديل، يؤدي التبديل المفرط إلى انتقال الصفحات المجهولة ذهابًا وإيابًا بين ذاكرة الوصول العشوائي ومساحة التبديل، مما يُشبع القرص. أما بدون التبديل، فتنتقل المشكلة إلى صفحات الملفات: حيث يتم حذفها وإعادة تحميلها بشكل متكرر من نظام الملفات، مما قد يجعل الجهاز غير قابل للاستخدام عمليًا.
إذا لم تتمكن النواة من الحصول على ذاكرة حرة، فسيتم تطبيق ما يلي: آلية نفاد الذاكرة (OOM)عندما يتم استنفاد كل ما يمكن حذفه أو ضغطه أو تبديله، تقوم النواة بحساب درجة لكل عملية (oom_scoreويقرر أيهما سيضحي به. وتكتمل هذه العملية بواسطة قاتل نفاد الذاكرة لتحرير كمية كبيرة من ذاكرة الوصول العشوائي (RAM) وتجنب حدوث عطل كامل.
المبادلة: ما هي، وكم يجب أن تضع فيها، ولماذا ليست "شراً محضاً"؟
تتمتع ذاكرة التبديل بسمعة سيئة، ويرجع ذلك جزئياً إلى النصائح القديمة والتبسيطات المفرطة مثل "إذا كان لديك الكثير من ذاكرة الوصول العشوائي (RAM) فلن تحتاج إلى ذاكرة تبديل". في الواقع، تُعد مساحة التبديل عنصرًا أساسيًا في تصميم ذاكرة لينكس، حتى على الأنظمة التي تحتوي على الكثير من ذاكرة الوصول العشوائي (RAM).
مساحة التبديل هي منطقة على القرص (قسم أو ملف) يستخدمها نظام التشغيل لتخزين صفحات الذاكرة غير النشطة . وهذا يسمح له بتحرير ذاكرة الوصول العشوائي (RAM) للعمليات التي تحتاجها فعليًا. وهي ليست ذاكرة افتراضية بحد ذاتها، بل هي إحدى الآليات التي تجعل ذلك ممكنًا.
بدون ذاكرة تبديل، لا تجد الصفحات المجهولة مكانًا تذهب إليه عند ازدياد ضغط الذاكرة. يمكن لنواة النظام الاعتماد على ذاكرة التخزين المؤقت والصفحات المدعومة بالملفات، ولكن بمجرد أن يصبح استهلاك الذاكرة المجهولة مرتفعًا بشكل حرج، تُجبر عمليًا على استدعاء آلية إنهاء العمليات بسبب نفاد الذاكرة (OOM killer) في وقت أبكر بكثير. من الناحية التقنية، يمكن لنظام لينكس العمل بدون ذاكرة تبديل، ولكن عمليًا، يُعد ذلك مخاطرة غير ضرورية في معظم الحالات.
عندما يتعلق الأمر بتحديد حجم مساحة التبديل، لا توجد وصفة واحدة، ولكن هناك بعض المعايير الحديثة المعقولة إلى حد ما اعتمادًا على دور الجهاز:
- خوادم بدون وضع السكونعادةً ما تكفي مساحة تبديل تتراوح بين 4 و8 جيجابايت كمساحة احتياطية، حتى مع وجود ذاكرة وصول عشوائي (RAM) كبيرة. بالنسبة للخدمات التي تستهلك الكثير من الذاكرة (قواعد البيانات، المحاكاة الافتراضية)، يمكنك زيادة مساحة التبديل إلى 1,5 ضعف ذاكرة الوصول العشوائي، ولكن يجب إعطاء الأولوية لزيادة ذاكرة الوصول العشوائي الفعلية.
- أجهزة سطح المكتب بدون وضع الإسباتمع وجود 16 جيجابايت أو أكثر من ذاكرة الوصول العشوائي، فإن 2-4 جيجابايت من مساحة التبديل أكثر من كافية كشبكة أمان.
- الأجهزة التي تدعم وضع السباتيجب أن تكون مساحة التبديل مساوية أو أكبر قليلاً من ذاكرة الوصول العشوائي (RAM)، لأن النظام يقوم بتفريغ جميع محتويات الذاكرة فيها عند وضع الجهاز في وضع الإسبات.
إنشاء مساحة تبديل يتميز بمرونة عالية. يمكنك استخدام قسم مخصص أو ملف تبديل . يُعد ملف التبديل مثاليًا عندما يكون القرص مقسمًا بالفعل أو عندما ترغب في تعديل حجمه دون إعادة تهيئة النظام بالكامل.
مقاييس الذاكرة: free، vmstat، ps، RSS، PSS، وغيرها
قد تؤدي أدوات إدارة الذاكرة التقليدية في لينكس إلى سوء فهم إذا لم تكن على دراية بمعنى كل عمود. الأمر free -h إنها أبسط طريقة لرؤية إجمالي الذاكرة، والذاكرة المستخدمة، والذاكرة الحرة، وذاكرة التخزين المؤقت، وذاكرة التبديل في لمحة.
عند الخروج free من المهم النظر إلى السطر الذي يخصم المخازن المؤقتة وذاكرة التخزين المؤقت، لأن هذا العمود يشير إلى الذاكرة التي تشغلها العمليات فعليًا، باستثناء ما تستخدمه النواة كذاكرة تخزين مؤقتة والتي يمكنها تحريرها بسرعة إذا لزم الأمر.
مع vmstat -s -S M ستحصل على ملخص أكثر تفصيلاً: إجمالي الذاكرة، الذاكرة المستخدمة، الذاكرة الحرة، الذاكرة النشطة، الذاكرة الخاملة، ذاكرة التبديل المؤقتة، إلخ. يمكنك أيضًا الاطلاع على /proc/meminfo للاطلاع على كل مقياس بالتفصيل، على الرغم من أن المخرجات جافة وأقل سهولة في الاستخدام.
لمعرفة العمليات التي تؤثر على ذاكرة الوصول العشوائي (RAM) بشكل أكبر، ps aux يعرض أعمدة مثل VSZ (إجمالي الذاكرة الافتراضية التي يمكن للعملية استخدامها إذا قامت بتحميل كل شيء) و RSS (حجم مجموعة الذاكرة المقيمة، الذاكرة الفعلية الموجودة حاليًا في ذاكرة الوصول العشوائي). ملاحظة: يشمل حجم مجموعة الذاكرة المقيمة أيضًا ذاكرة المكتبة المشتركة، والتي يتم احتسابها عدة مرات إذا تم استخدامها بواسطة عمليات متعددة.
هنا يأتي دور PSS (حجم المجموعة النسبي)والتي توزع تكلفة المكتبات المشتركة بين العمليات التي تستخدمها. وللحصول على PSS بسهولة، توجد أدوات مثل smem، مفيد جدًا لمعرفة التطبيقات التي تستهلك كميات كبيرة من البيانات دون تشويه البيانات بسبب المكتبات المشتركة.
تجزئة الذاكرة، المكدس، الكومة، وحدود الذاكرة
هناك جانب آخر أقل وضوحًا لإدارة الذاكرة وهو التجزئة . يمكننا الحديث عن التجزئة الداخلية (عندما يتم تخصيص كتل مستديرة بمضاعفات 4 أو 8 أو 16 بايت، مما يترك جزءًا غير قابل للاستخدام) والتجزئة الخارجية (عندما توجد ذاكرة حرة ولكنها مقسمة إلى أجزاء صغيرة تمنع استخدام تخصيص متجاور كبير).
في تطبيقات مثل Redis، ستلاحظ أحيانًا اختلافات بين الذاكرة التي يُبلغ عنها النظام (RSS) والذاكرة التي يعتبرها التطبيق نفسه مفيدة (used_memory). عادةً ما تُعزى هذه المسافة إلى حد كبير إلى التجزئة الخارجية، الفجوات التي يعتبرها النظام مشغولة ولكن العملية لا تستخدمها فعلياً.
تنقسم ذاكرة العملية من الناحية المفاهيمية إلى المكدس والكومةتُستخدم المكدسة للمتغيرات المحلية واستدعاءات الدوال، بينما تُستخدم الكومة للتخصيصات الديناميكية. malloc() وما شابه ذلك. عندما تتجاوز هياكل البيانات قدرة المكدس على استيعابها، يتم سحبها من الكومة ومعالجتها باستخدام المؤشرات.
يمكن تعديل الحد الأقصى لحجم المكدس لكل عملية باستخدام ulimit -a وإعدادات النظام. يؤدي تقليله إلى الحد من عدد المتغيرات المحلية الكبيرة، بينما يسمح زيادته بمزيد من المتغيرات أو التكرار العميق. يمكن أن يساعد ضبط هذا المعامل في تحسين التحكم في استخدام الذاكرة وتقليل أنواع معينة من التجزئة، على الرغم من أنه ليس حلاً سحرياً.
المراقبة والتشخيص المتقدمان: top، htop، vmstat، sar، وغيرها
لتحديد العمليات التي تستهلك ذاكرة الوصول العشوائي (RAM)، يمكنك البدء بـ top وإذا كنت تريد شيئًا أكثر سهولة في الاستخدام، مع htopيعرض الأخير أشرطة استخدام وحدة المعالجة المركزية والذاكرة والمبادلة، ويتيح فرز وتصفية العمليات بشكل تفاعلي.
في دبيان والمشتقات منها، قم بتثبيت برنامج htop مع sudo apt install htopفي نظام AlmaLinux وأنظمة أخرى مشابهة لنظام Red Hat، مع sudo dnf install htopبمجرد الدخول، يمكنك الفرز حسب الذاكرة، والبحث عن عمليات محددة، وإنهاء المهام الإشكالية مباشرة من الواجهة.
لتحليل أعمق ووضع الدُفعات، vmstat 5 يوفر معلومات دورية عن العمليات والذاكرة والتقسيم إلى صفحات وإدخال/إخراج الكتل والمقاطعات وجدولة وحدة المعالجة المركزية. وهو مثالي لمراقبة كيفية تطور ضغط الذاكرة بمرور الوقت.
جناح sysstat وهي تتضمن أدوات مثل sarوالتي تتيح لك تسجيل وتحليل استخدام الذاكرة والموارد الأخرى. على سبيل المثال، sar -r 1 5 يعرض البرنامج استخدام الذاكرة والذاكرة الافتراضية كل ثانية، خمس مرات. على نظام دبيان، يتم تثبيته مع sudo apt install sysstatوفي نظام AlmaLinux مع sudo dnf install sysstat.
إذا كنت بحاجة إلى تصحيح أخطاء متعمق على مستوى النواة، com.bpftrace هي أداة قوية تعتمد على eBPF. تتيح لك مراقبة استدعاءات النظام، ورصد الوصول إلى الذاكرة، واكتشاف الاختناقات دون الحاجة إلى إعادة تجميع البرنامج أو إعادة تشغيله. عادةً ما يتم تثبيتها مع sudo apt install bpftrace على أنظمة شبيهة بنظام دبيان.
إدارة الذاكرة العملية: التبديل، وسرعة التبديل، وتنظيف ذاكرة التخزين المؤقت
تتمثل إحدى المهام الأساسية على العديد من الخوادم في التحقق من الوضع الحالي لعملية التبادل. مع swapon --show لديك قائمة بأجهزة وملفات التبديل النشطة، وحجمها، ونوعها، وأولويتها. إذا كنت بحاجة إلى إضافة تبديل أثناء التشغيل، يمكنك إنشاء ملف باستخدام fallocateالحصول على التصاريح اللازمة chmod 600قم بتنسيقه باستخدام mkswap وتفعيله مع swaponلجعلها دائمة، ما عليك سوى إضافة الإدخال المقابل إلى /etc/fstab.
معامل vm.swappiness يتحكم هذا الخيار في مدى سرعة إعطاء النواة الأولوية لاستخدام ذاكرة التبديل على حساب ملء ذاكرة الوصول العشوائي (RAM). ويتراوح بين 0 و100. القيم المنخفضة (10-20) تجعل النظام يتجنب استخدام ذاكرة التبديل إلا عند الضرورة القصوى، بينما القيم المرتفعة (60 أو أكثر) تشجع النظام على نقل الصفحات إلى ذاكرة التبديل بسهولة أكبر للحفاظ على مساحة كافية في ذاكرة الوصول العشوائي.
غالباً ما يكون ذلك ذا أهمية بالنسبة للخوادم ذات الأقراص البطيئة أو قواعد البيانات الكبيرة قلل من قابلية التبديلعلى سبيل المثال، إلى 10 أو 20، مع sudo sysctl vm.swappiness=10بالنسبة لأجهزة الكمبيوتر المكتبية المزودة بذاكرة zram سريعة أو أقراص SSD، يمكن أن توفر القيم المتوسطة مثل 30-60 توازنًا جيدًا بين زمن الوصول واستخدام الذاكرة.
في حالات الذاكرة العادلة، يكون من الضروري أحيانًا إجبار تحرير ذاكرة التخزين المؤقت مع sudo sync && sudo sysctl -w vm.drop_caches=3يؤدي هذا إلى إفراغ جزء كبير من ذاكرة التخزين المؤقت للصفحات ومؤشرات الإدخال. وهو مفيد أحيانًا للاختبار أو لتحرير الذاكرة على الأنظمة ذات الموارد المحدودة جدًا، ولكن لا ينبغي استخدامه بشكل روتيني لأنه يؤدي أيضًا إلى فقدان تحسين الأداء الذي توفره ذاكرة التخزين المؤقت.
أدوات تحكم متقدمة: cgroup v2، و memory.pressure، و OOM في مساحة المستخدم
في الأنظمة الحديثة التي تستخدم systemd و cgroup v2 ، يمكن ضبط إدارة الذاكرة بدقة بواسطة مجموعات العمليات. ينظم cgroup v2 المهام في تسلسلات هرمية ويطبق حدود الموارد وأولوياتها (وحدة المعالجة المركزية، الذاكرة، الإدخال/الإخراج) على مستوى المجموعة، وليس فقط على مستوى العملية الفردية.
ضمن التسلسل الهرمي للذاكرة، توجد معلمات مثل memory.low تتيح لك هذه الخيارات الإشارة إلى أن ذاكرة مجموعات التحكم (cgroups) معينة يجب أن تكون أكثر حماية ضد الضغط العالمي، في حين أن البعض الآخر قد يكون أكثر قابلية للاستغناء عنه إذا كانت هناك حاجة لتحرير ذاكرة الوصول العشوائي (RAM).
الملف memory.pressure يكشف هذا عن مقاييس مفيدة للغاية: المدة التي ظلت فيها المهام في تلك المجموعة (cgroup) عالقة بسبب نقص الذاكرة، وذلك بفواصل زمنية قدرها 10 و60 و300 ثانية. بعض يشير ذلك إلى ما إذا كان قد تم تأجيل مهمة واحدة على الأقل، و بالإضافة إلى يعكس ذلك اللحظات التي تأثرت فيها جميع مهام المجموعة في وقت واحد.
بالإضافة إلى آلية إيقاف العمليات التي تعمل بسبب نفاد الذاكرة في نواة النظام، ظهرت حلول في مساحة المستخدم مثل: في وقت مبكر, نوهانغ o systemd-oomdيقوم برنامج EarlyOOM بمراقبة ذاكرة الوصول العشوائي (RAM) وذاكرة التبديل (swap)، وعندما تنخفض عن عتبات معينة، يقوم بإنهاء العمليات بشكل استباقي. oom_score أعلى، مما يعيد قابلية الاستخدام قبل أن يتجمد الجهاز.
يتجاوز NoHang ذلك بكثير: فهو يدعم معايير اختيار أكثر ، ويأخذ ضغط الذاكرة في الحسبان، ويتكامل بسلاسة مع الإعدادات المتقدمة، على الرغم من أن تطويره شهد بعض التقلبات. في المقابل، يتكامل systemd-oomd مباشرةً مع systemd وcgroup v2، وهو الخيار المفضل حاليًا في العديد من التوزيعات لإدارة حالات نقص الذاكرة بذكاء ودقة أكبر.
التبديل الحديث: zram و zswap وأولويات الجهاز
بالإضافة إلى تبديل الأقراص "الكلاسيكي"، يوفر نظام لينكس آليات حديثة تعمل على تحسين الأداء بشكل كبير من خلال الجمع بين ضغط ذاكرة الوصول العشوائي والاستخدام الانتقائي للقرص.
zram هي وحدة نواة تقوم بإنشاء وحدات تخزين كتلية في ذاكرة الوصول العشوائي (RAM) نفسها، حيث تُخزَّن الصفحات في حالة مضغوطة. تُستخدم هذه الوحدات عادةً كوحدات تبديل فائقة السرعة: يستهلك الضغط وفك الضغط جزءًا من وحدة المعالجة المركزية، ولكنك تكسب سعة ذاكرة منطقية وتقلل بشكل كبير من استخدام القرص.
في العديد من التوزيعات، يكفي التثبيت أدوات zram o مولد zram وتفعيل خدمتها. على سبيل المثال، في دبيان يمكنك استخدام sudo apt install zram-tools وتنشيط zramswap مع نظام systemd. في نظام AlmaLinux، مع sudo dnf install zram-generator والخدمة المقابلة لها.
من ناحية أخرى، يعمل zswap كذاكرة تخزين مؤقتة مضغوطة أمام مساحة تبديل القرص . يحاول أولاً تخزين الصفحات المُبدّلة في ذاكرة الوصول العشوائي المضغوطة (RAM)؛ وعندما تمتلئ هذه الذاكرة المؤقتة أو تصبح الصفحات غير نشطة، يقوم بالكتابة إلى مساحة التبديل الفعلية. هذا يقلل من عمليات الإدخال/الإخراج للقرص ويطيل عمر محركات الأقراص الصلبة SSD، على حساب زيادة طفيفة في استهلاك وحدة المعالجة المركزية (CPU).
عند دمج أجهزة تبديل متعددة (مثل zram وملف قرص)، من الضروري ضبط أولويات. مع swapon -p أو الخيار pri= en /etc/fstab أنت تحدد الجهاز الذي يجب استخدامه أولاً. الممارسة المعتادة هي إعطاء أولوية عالية (على سبيل المثال، 100) لـ zram وأولوية أقل (10) لمساحة التبديل على القرص، بحيث تستفيد النواة استفادة كاملة من مساحة التبديل المضغوطة في ذاكرة الوصول العشوائي قبل الوصول إلى القرص.
إدارة الذاكرة المطبقة على الخوادم: التبديل، والخدمات، والأمان
في خوادم الويب (أباتشي، إنجينكس)، وقواعد البيانات (ماي إس كيو إل، ماريا دي بي، مونغو دي بي)، أو التطبيقات كثيفة الاستخدام للموارد، تُعد الذاكرة المورد الأساسي. ويحدد تكوين ذاكرة الوصول العشوائي (RAM) وذاكرة التبديل بشكل مباشر عدد الطلبات المتزامنة التي يمكنك معالجتها قبل أن يبدأ النظام في مواجهة صعوبات.
في حالة محركات قواعد البيانات مثل MongoDB، من الضروري أن تتجاوز سعة ذاكرة الوصول العشوائي (RAM) الفعلية متطلبات قاعدة البيانات ؛ وإلا، ستبدأ قاعدة البيانات باستخدام مساحة التبديل، مما سيؤدي إلى انخفاض حاد في الأداء نتيجةً للاختلاف الكبير بين الوصول إلى ذاكرة الوصول العشوائي والوصول إلى القرص. وينطبق الأمر نفسه على MySQL/MariaDB، حيث توصي أدوات مثل MySQLTuner بمعايير الذاكرة بناءً على ذاكرة الوصول العشوائي المتاحة.
لتجنب هدر الذاكرة، يُنصح بإيقاف الخدمات غير المستخدمة وتنظيف الحاويات والصور ووحدات تخزين Docker التي لم تعد مطلوبة. في بيئات التطوير وضمان الجودة، من السهل جدًا تراكم موارد مهملة تستهلك جيجابايتات من ذاكرة الوصول العشوائي ومساحة القرص دون أن يلاحظ أحد ذلك.
كما يلعب الأمن دوراً أيضاً: فتح منافذ غير ضرورية تزيد هذه البرامج الضارة من مساحة الهجوم. فعلى سبيل المثال، يمكن للبرامج الضارة التي تتمكن من اختراق النظام أن تُشغّل عمليات تعدين تستهلك موارد المعالج والذاكرة، وتُجدول المهام في crontab ويؤدي ذلك إلى تعطل النظام. ويُعد فحص المنافذ الواردة والصادرة، وإغلاق كل شيء غير ضروري، وتنظيف مهام cron المشبوهة جزءًا من النظافة الأساسية للنظام التي تحمي أيضًا موارد الذاكرة.
أنظمة الذاكرة والملفات: ext4، وXFS، وBtrfs، والتسجيل.
على الرغم من أن الأمر قد يبدو منفصلاً، إلا أن اختيار نظام الملفات وتكوينه يؤثران أيضاً على سلوك الذاكرة وحمل الإدخال/الإخراج. فنظام Ext4، على سبيل المثال، يستخدم سجلّاً، والذي قد يُضيف ضغطاً إضافياً على القرص، وبالتالي على إدارة ذاكرة التخزين المؤقت، وذلك بحسب الحمل.
في بيئات الخوادم ذات المتطلبات العالية، يختار العديد من مديري الأنظمة نظام الملفات XFS أو حتى Btrfs . يتميز XFS بأداء ممتاز مع الملفات الكبيرة والأنظمة عالية الأداء. يوفر Btrfs ميزات متقدمة مثل اللقطات، والضغط الشفاف، ووحدات التخزين الفرعية، ولكن بتكلفة تتمثل في بعض التعقيد، ومستوى نضج لا يزال محل نقاش بالنسبة لجميع أحمال العمل، وذلك بحسب الإصدار والتوزيعة.
يقوم النواة بتكييف سياسة التخزين المؤقت والكتابة وفقًا لخصائص نظام الملفات، لذا فإن التبديل من ext4 إلى XFS أو Btrfs لا يؤثر فقط على عمليات الإدخال/الإخراج الخام، ولكن أيضًا على كيفية استخدام ذاكرة الوصول العشوائي وذاكرة التخزين المؤقت للصفحات لتخزين عمليات القراءة والكتابة مؤقتًا.
أدوات وبرامج رسومية أساسية للمسؤولين
على الرغم من أن الطرفية لا تزال الأداة الأساسية لأي مسؤول نظام، إلا أن هناك أدوات تجعل إدارة الذاكرة والموارد أسهل بكثير . من بينها Glances ، وهي أداة مراقبة فورية تعرض وحدة المعالجة المركزية والذاكرة والقرص والشبكة والعمليات على شاشة واحدة، مع واجهة ويب اختيارية لمراقبة عدة خوادم من خلال متصفح.
للتثبيت السريع على نظام دبيان، ببساطة... sudo apt install glancesيكمل برنامج Glances بشكل جيد للغاية مع htop, vmstat y sarمما يوفر نظرة عامة مرئية أكثر عن كيفية تصرف النظام تحت الضغط.
في مجال إدارة الخوادم الرسومية، يوفر Cockpit واجهة ويب سهلة الاستخدام لمراقبة الذاكرة والعمليات والخدمات . تتيح لك هذه الواجهة إدارة عدة خوادم من وحدة تحكم واحدة، وبدء وإيقاف وحدات systemd، ومراقبة استخدام ذاكرة التبديل وذاكرة zram، ومراجعة السجلات دون الحاجة إلى مغادرة متصفحك.
في أنظمة سطح المكتب، تقوم العديد من التوزيعات بدمج مراقب الموارد الخاص بها، ولكن بالنسبة للبيئات التي لا تحتوي على واجهة مستخدم رسومية أو حيث تريد شيئًا خفيف الوزن، فإن الجمع بين أدوات وحدة التحكم هذه والبرامج النصية المخصصة يمنحك رؤية ممتازة لما يحدث مع الذاكرة في أي وقت.
تتطلب إدارة الذاكرة السليمة في لينكس فهم كيفية استخدام النواة لذاكرة الوصول العشوائي (RAM)، وأدوار كل من swap و zram و zswap، وكيفية استجابة cgroup v2 وأنظمة إدارة الذاكرة المختلفة (OOMs) للضغط، والأدوات المتاحة لمراقبة النظام وضبطه بدقة. عند دمج كل هذه العناصر معًا - بدءًا من free و vmstat و PSS و memory.pressure وصولًا إلى zram و swappiness و systemd-oomd - ستتوقف عن المعاناة من مشكلة "استهلاك لينكس لذاكرة الوصول العشوائي" وستبدأ في امتلاك نظام مستقر ومُحسَّن بدقة، قادر على تحقيق أقصى أداء للأجهزة في أي بيئة: خادم، أو جهاز مكتبي، أو بيئة ذات أحمال عالية.
مؤشر
- 1 المفاهيم الأساسية والخرافات حول الذاكرة في لينكس
- 2 الذاكرة الافتراضية والصفحات وهياكل النواة الداخلية
- 3 أنواع الذاكرة: الذاكرة المدعومة بالملفات، والذاكرة المجهولة، وكيفية ارتباطها بذاكرة التبديل.
- 4 ضغط الذاكرة، والتخبط، وقاتل نفاد الذاكرة
- 5 المبادلة: ما هي، وكم يجب أن تضع فيها، ولماذا ليست "شراً محضاً"؟
- 6 مقاييس الذاكرة: free، vmstat، ps، RSS، PSS، وغيرها
- 7 تجزئة الذاكرة، المكدس، الكومة، وحدود الذاكرة
- 8 المراقبة والتشخيص المتقدمان: top، htop، vmstat، sar، وغيرها
- 9 إدارة الذاكرة العملية: التبديل، وسرعة التبديل، وتنظيف ذاكرة التخزين المؤقت
- 10 أدوات تحكم متقدمة: cgroup v2، و memory.pressure، و OOM في مساحة المستخدم
- 11 التبديل الحديث: zram و zswap وأولويات الجهاز
- 12 إدارة الذاكرة المطبقة على الخوادم: التبديل، والخدمات، والأمان
- 13 أنظمة الذاكرة والملفات: ext4، وXFS، وBtrfs، والتسجيل.
- 14 أدوات وبرامج رسومية أساسية للمسؤولين