OOMD.CONF(5)

الاسم
oomd.conf، oomd.conf.d - ملفات تهيئة عامة لـ systemd-oomd

موجز

    /etc/systemd/oomd.conf
    /run/systemd/oomd.conf
    /usr/local/lib/systemd/oomd.conf
    /usr/lib/systemd/oomd.conf
    /etc/systemd/oomd.conf.d/*.conf
    /run/systemd/oomd.conf.d/*.conf
    /usr/local/lib/systemd/oomd.conf.d/*.conf
    /usr/lib/systemd/oomd.conf.d/*.conf

الوصف

تضبط هذه الملفات المعاملات المختلفة لقاتل نفاد الذاكرة (OOM) في فضاء المستخدم systemd(1)، systemd-oomd.service(8). راجع systemd.syntax(7) للحصول على وصف عام للصياغة.

أدلة الضبط والأسبقية

يُضبط التشكيل المبدئي أثناء التجميع، لذا لا يلزم التشكيل إلا عند الحاجة للانحراف عن تلك القيم المبدئية. يُحمل ملف التشكيل الرئيس من أحد الأدلة المدرجة حسب ترتيب الأولوية، ويُستخدم أول ملف يُعثر عليه فقط: /etc/systemd/، و /run/systemd/، و /usr/local/lib/systemd/ [1]، و /usr/lib/systemd/. تحتوي نسخة المورد من الملف على مدخلات مُعلقة تظهر القيم المبدئية كدليل للمدير. يمكن أيضًا إنشاء تجاوزات محلية عن طريق إنشاء ملفات تكميلية (drop-ins)، كما هو موضح أدناه. يمكن أيضًا تحرير ملف التشكيل الرئيس لهذا الغرض (أو نسخة في /etc/ إذا كانت مشحونة تحت /usr/)، ومع ذلك يوصى باستخدام الملفات التكميلية للتشكيل المحلي بدلاً من إجراء تعديلات على ملف التشكيل الرئيس.

بالإضافة إلى ملف الإعداد الرئيس، تُقرأ قصاصات الإعداد الإضافية من /usr/lib/systemd/*.conf.d/ و /usr/local/lib/systemd/*.conf.d/ و /etc/systemd/*.conf.d/. لهذه الإضافات أولوية أعلى وتتجاوز ملف الإعداد الرئيس. تُفرز الملفات في الأدلة الفرعية للإعداد *.conf.d/ حسب أسماء ملفاتها بترتيب معجمي، بغض النظر عن الدليل الفرعي الذي توجد فيه. عندما تحدد ملفات متعددة نفس الخيار، بالنسبة للخيارات التي تقبل قيمة واحدة فقط، فإن المدخلة في الملف الأخير في الترتيب هي التي تسود، وبالنسبة للخيارات التي تقبل قائمة من القيم، تُجمع المدخلات كما تظهر في الملفات المرتبة.

عندما تحتاج الحزم إلى تخصيص الضبط، يمكنها تثبيت ملفات تكميلية (drop-ins) تحت /usr/. تُحجز الملفات في /etc/ لمدير النظام المحلي، الذي قد يستخدم هذا المنطق لتخطي ملفات الضبط المثبتة من قبل حزم المورّد. يجب استخدام الملفات التكميلية لتخطي ملفات الحزم التكميلية، بما أن ملف الضبط الرئيس له أسبقية أدنى. ويُوصى ببدء جميع أسماء الملفات في تلك المجلدات الفرعية برقم من خانتين وواصلة، لتبسيط الترتيب. كما يحدد هذا مفهوم أولويات الملفات التكميلية للسماح لموردي أنظمة التشغيل بشحن ملفات تكميلية ضمن نطاق محدد أدنى من النطاق الذي يستخدمه المستخدمون. وهذا من شأنه أن يقلل من خطر تخطي ملفات الحزم التكميلية للملفات التكميلية التي حددها المستخدمون عرضًا. ويُوصى باستخدام النطاق 10-40 للملفات التكميلية في /usr/ والنطاق 60-90 للملفات التكميلية في /etc/ و /run/، للتأكد من أن الملفات التكميلية المحلية والعابرة تأخذ الأولوية على الملفات التكميلية التي يشحنها مورد نظام التشغيل.

لتعطيل ملف تشكيل مقدم من المورد، فإن الطريقة الموصى بها هي وضع وصلة رمزية إلى /dev/null في دليل التشكيل في /etc/، بنفس اسم ملف تشكيل المورد.

حدث ما قبل القتل

يدعم systemd-oomd إخطار المكونات الخارجية قبل قتل مجموعة تحكم. يُنجز ذلك بإرسال إشعار عبر varlink إلى جميع المقابس الموجودة في مجلد /run/systemd/oomd.prekill.hook/. يجب على كل مقبس تنفيذ واجهة io.systemd.oom.Prekill. يحتوي الإشعار على مسار مجموعة التحكم للسماح للخطاف بتحديد مجموعة التحكم التي تُقتل. يسمح هذا للمكونات الخارجية بأداء أي تنظيف أو تسجيل ضروري قبل إنهاء مجموعة التحكم. لا يُقصد من الخطاف أن يكون وسيلة لتجنب القتل، بل آلية إخطار. لاحظ أن هذا خيار مُمتاز لأنه، حتى مع وجود مهلة زمنية، فهو متزامن ويؤخر القتل، لذا استخدمه بحذر. الآلية المفضلة عادةً لمعالجة ضغط الذاكرة هي فعل ما يصفه معالجة ضغط الموارد[2] وهي غير مُمتازة، غير متزامنة ولا تؤخر القتل.

مجموعات قواعد OOM

يدعم systemd-oomd مجموعات قواعد مخصصة تُعرّف شروطًا وإجراءات لمعالجة OOM على أساس كل وحدة. تستخدم ملفات مجموعة القواعد الامتداد .oomrule وتُحمّل من /etc/systemd/oomd/rules.d/ و /run/systemd/oomd/rules.d/ و /usr/local/lib/systemd/oomd/rules.d/ و /usr/lib/systemd/oomd/rules.d/. تختار الوحدات الانضمام إلى مجموعات القواعد عبر إعداد OOMRules= في systemd.resource-control(5)، الذي يأخذ قائمة مفصولة بمسافات من أسماء مجموعات القواعد (اسم الملف بدون الامتداد .oomrule).

يحتوي كل ملف مجموعة قواعد على قسم "[Rule]" بالخيارات التالية. يجب تكوين واحد على الأقل من MemoryPressureAbove= أو SwapUsageMax=؛ تُتجاهل مجموعات القواعد بدون شروط. إذا تم تعيين كليهما، تُجمع الشروط باستخدام AND، أي يُفعّل الإجراء فقط عندما يُتجاوز كلا الحدين في وقت واحد.

MemoryPressureAbove=
    يُعيّن حد ضغط الذاكرة الذي سيُفعّل عنده إجراء القاعدة. يمثل ضغط الذاكرة جزء الوقت في نافذة زمنية مدتها 10 ثوانٍ الذي تأخرت فيه جميع المهام في مجموعة التحكم (PSI "full avg10"). يأخذ قيمة محددة بالنسبة المئوية (عند إلحاقها بـ "%") أو بالألف ("‰") أو بعشرة آلاف ("‱")، بين 0% و 100%، شاملة. إذا لم يُعيّن، لا يُقيّم هذا الشرط. لا يمكن تجاوز قيمة "100%" أبدًا وبالتالي تُرفض مع تحذير؛ قيمة "0%" تجعل الشرط صحيحًا عند أي ضغط ملاحظ، وهو عادةً غير مفيد.

    أُضيف في الإصدار 261.

SwapUsageMax=
    يُعيّن حد استخدام المبادلة على مستوى النظام الذي سيُفعّل عنده إجراء القاعدة. يأخذ قيمة محددة بالنسبة المئوية (عند إلحاقها بـ "%") أو بالألف ("‰") أو بعشرة آلاف ("‱")، بين 0% و 100%، شاملة. إذا لم يُعيّن، لا يُقيّم هذا الشرط. لا يمكن تجاوز قيمة "100%" أبدًا وبالتالي تُرفض مع تحذير؛ قيمة "0%" تُفعّل بمجرد استخدام أي مبادلة، وهو عادةً غير مفيد.

    أُضيف في الإصدار 261.

Action=
    يُحدد الإجراء الذي يُتخذ عند استيفاء شروط القاعدة. يأخذ واحدًا من "kill-all" أو "kill-by-pgscan" أو "kill-by-swap". هذا الإعداد إلزامي؛ تُتجاهل مجموعات القواعد بدون Action=.

        • يرسل "kill-all" SIGKILL إلى كل عملية في التسلسل الهرمي لمجموعات التحكم للوحدة، بما في ذلك أي مجموعات تحكم فرعية.

        • يختار "kill-by-pgscan" ويقتل مجموعة التحكم الفرعية ذات أعلى معدل مسح صفحات (استعادة) حديث.

        • يختار "kill-by-swap" ويقتل مجموعة التحكم الفرعية ذات أعلى استخدام للمبادلة.

    أُضيف في الإصدار 261.

LastingSec=
    يُعيّن المدة التي يجب أن تُستوفى فيها الشروط باستمرار قبل اتخاذ الإجراء. يأخذ قيمة زمنية، انظر systemd.time(7) للحصول على تفاصيل حول الصيغة المسموح بها. المبدئي هو 0، أي يُتخذ الإجراء فورًا عند استيفاء الشروط.

    أُضيف في الإصدار 261.

خيارات القسم [OOM]

الخيارات التالية متاحة في القسم [OOM]:

SwapUsedLimit=
    يضبط الحد الأقصى لاستخدام الذاكرة والمبادلة على النظام قبل أن يتخذ systemd-oomd إجراءً. إذا كان كل من كسر الذاكرة المستخدمة وكسر المبادلة المستخدمة على النظام أكبر مما هو محدد هنا، سيتصرف systemd-oomd على مجموعات التحكم السليلة المؤهلة التي يزيد استخدامها للمبادلة عن 5% من إجمالي المبادلة، بدءًا من تلك ذات أعلى استخدام للمبادلة. تعتمد مجموعات التحكم التي تُراقب والإجراء الذي يُتخذ على ما ضبطته الوحدة لـ ManagedOOMSwap=. يأخذ قيمة محددة بالنسبة المئوية (عند إلحاقها بـ "%")، أو بالألف ("‰") أو بعشرة آلاف ("‱")، بين 0% و100%، شاملة. المبدئي هو 90%.

    أُضيف في الإصدار 247.

DefaultMemoryPressureLimit=
    يضبط الحد الأقصى لضغط الذاكرة على مجموعة تحكم الوحدة قبل أن يتخذ systemd-oomd إجراءً. يمكن لوحدة تجاوز هذه القيمة باستخدام ManagedOOMMemoryPressureLimit=. يمثل ضغط الذاكرة لهذه الخاصية كسر الوقت في نافذة مدتها 10 ثوانٍ تأخرت فيها جميع المهام في مجموعة التحكم. لكل مجموعة تحكم مراقبة، إذا تجاوز ضغط الذاكرة على تلك المجموعة الحد المضبوط لمدة أطول من المدة المضبوطة بواسطة DefaultMemoryPressureDurationSec=، سيتصرف systemd-oomd على مجموعات التحكم السليلة المؤهلة، بدءًا من تلك التي لديها أعلى نشاط استصلاح إلى أقل نشاط استصلاح. تعتمد مجموعات التحكم التي تُراقب والإجراء الذي يُتخذ على ما ضبطته الوحدة لـ ManagedOOMMemoryPressure=. يأخذ كسرًا محددًا بنفس طريقة SwapUsedLimit= أعلاه. المبدئي هو 60%.

    أُضيف في الإصدار 247.

DefaultMemoryPressureDurationSec=
    يضبط مقدار الوقت الذي تحتاج مجموعة تحكم الوحدة لتجاوز حدود ضغط الذاكرة فيه قبل أن يتخذ systemd-oomd إجراءً. يمكن لوحدة تجاوز هذه القيمة باستخدام ManagedOOMMemoryPressureDurationSec=. تُعرف حدود ضغط الذاكرة بواسطة DefaultMemoryPressureLimit= و ManagedOOMMemoryPressureLimit=. يجب ضبطها على 0، أو على الأقل ثانية واحدة. المبدئي هو 30 ثانية عند عدم الضبط أو 0.

    أُضيف في الإصدار 248.

PrekillHookTimeoutSec=
    يضبط مقدار الوقت الذي سينتظره systemd-oomd لخطافات ما قبل القتل لإكمالها، قبل المتابعة مع إنهاء مجموعة التحكم. تعمل خطافات ما قبل القتل بوضع مقبس varlink في مجلد /run/systemd/oomd.prekill.hook/. يجب على كل مقبس تنفيذ واجهة لكي يعمل الإشعار. يرسل systemd-oomd إشعارًا قبل قتل مجموعة تحكم لكل مقبس مكتشف. المهلة الزمنية مقصودة أن تكون عامة وليست لكل خطاف. إذا عادت جميع الخطافات مبكرًا، يُنفذ القتل في أقرب وقت ممكن. يجب أن تكون المهلة الزمنية على الأقل 1 ثانية. المبدئي هو 0، مما يعني أن systemd-oomd لن ينتظر ولن تُرسل أي إشعارات.

    أُضيف في الإصدار 260.

انظر أيضًا

systemd(1)، systemd.resource-control(5)، systemd-oomd.service(8)، oomctl(1)

ملاحظات

1.  💣💥🧨💥💥💣 يرجى ملاحظة أن ملفات الضبط تلك يجب أن تكون متوفرة في جميع الأوقات. إذا كان /usr/local/ قسماً منفصلاً، فقد لا يكون متوفراً أثناء بدء التشغيل المبكر، ويجب عدم استخدامه للضبط.

2.  التعامل مع ضغط الموارد
    https://systemd.io/PRESSURE

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.