تحسين نواة Linux

بالإضافة إلى تثبيت توسيع الحدث الضروري، يُعد تحسين نواة Linux من الأمور الأساسية جدًا لدعم توزيع الأحمال في النظام. تعتبر كل خطوة من هذه الخطوات المُحسَّنة بمثابة بالغ الأهمية لذلك يجب عليك القيام بكل خطوة على حدى.

تفسير المعلمات:

max-file: يُمثِل العدد الأقصى للمقابض المفتوحة التي يمكن فتحها على مستوى النظام. وهو مُتعلق بالنظام بأكمله وليس بالمستخدمين.

ulimit -n: يُمثِل التحكم في العدد الأقصى للمقابض المفتوحة التي يمكن فتحها على مستوى العملية. وهو مُرتبط بتحكم مقبض الملفات المتاح للمستخدم الحالي في الجلسة الحالية والعمليات التي تم تشغيلها.

لمعرفة العدد الأقصى للمقابض المفتوحة على مستوى النظام: cat /proc/sys/fs/file-max

افتح الملف /etc/sysctl.conf وأضف الإعدادات التالية:

#تعيين عدد TIME_WAIT للنظام. إذا كان أكبر من القيمة الافتراضية، سيتم تنظيفه على الفور
net.ipv4.tcp_max_tw_buckets = 20000
#تعريف أقصى طول للصف الذي يمكن أن يكون لكل منفذ في النظام. هذا هو معلم عام
net.core.somaxconn = 65535
#لطلبات الاتصال الواردة التي لم تحصل بعد على التأكيد من الطرف الآخر، يتم السماح بأقصى عدد لها للبقاء في طابور الانتظار
net.ipv4.tcp_max_syn_backlog = 262144
#عندما يكون معدل وصول حزم البيانات عبر كل واجهة الشبكة أسرع من معدل معالجتها من قبل النواة، يسمح بأقصى عدد من الحزم الواردة في الطابور
net.core.netdev_max_backlog = 30000
#سيؤدي هذا الخيار إلى انتهاء صلاحية عملاء شبكة NAT، يُفضّل تعيينه إلى القيمة 0. انتبه، تمت إزالة إعدادات tcp_tw_recycle لنظام Linux ابتداءً من النواة 4.12، وإذا ظهرت خطأ "No such file or directory" يُرجى تجاهله
net.ipv4.tcp_tw_recycle = 0
#الحد الأقصى لعدد الملفات التي يمكن لجميع العمليات في النظام فتحها
fs.file-max = 6815744
#حجم جدول تتبع جدار الحماية. ملاحظة: إذا لم يتم تمكين جدار الحماية، قد يتم عرض رسالة خطأ "net.netfilter.nf_conntrack_max" is an unknown key"، في هذه الحالة يُمكن تجاهل الرسالة
net.netfilter.nf_conntrack_max = 2621440
net.ipv4.ip_local_port_range = 10240 65000

قم بتشغيل الأمر sysctl -p لجعل التغييرات فورية.

ملاحظة:
يمكن ضبط العديد من الخيارات الأخرى في ملف /etc/sysctl.conf وفقًا لاحتياجات البيئة الخاصة بك.

فتح عدد الملفات

قم بتعيين قيمة فتح ملفات النظام لحل مشكلة "too many open files" في حالات الحمل العالي. يؤثر هذا الخيار مباشرةً على عدد الاتصالات العميلية التي يمكن للعملية الفردية استيعابها.

تعتبر Soft open files من معلمات النظام في Linux التي تؤثر على الحد الأقصى لعدد المقابض التي يمكن للعملية الفردية فتحها، وتؤثر هذه القيمة على عدد اتصالات المستخدم التي يمكن للعملية الفردية الاحتفاظ بها. يُمكنك رؤية هذه القيمة بتشغيل الأمر ulimit -n، إذا كانت القيمة 1024، فهذا يعني أن العملية الفردية يمكنها الاحتفاظ بأقصى 1024 اتصال (قد يقل بسبب فتح مقابض الملفات الأخرى). إذا قمت بتشغيل 4 عمليات للاحتفاظ باتصالات المستخدم، فإن النظام بأكمله لن يتمكن من دعم أكثر من 4*1024 اتصال متزامن (أي 4x1024 مستخدم على الأكثر)، يُمكن زيادة هذا الإعداد لتحسين قدرة الخدمة على احتضان مزيد من اتصالات TCP.

طرق تعديل Soft open files:

الطريقة الأولى: تشغيل ulimit -HSn 102400 مباشرة في الطرفية، ثم إعادة تشغيل workerman. هذا ساري المفعول فقط في الجلسة الحالية، بمجرد تسجيل الخروج سيُعاد فتح ملفات النظام لتكون في القيمة الافتراضية.

الطريقة الثانية: إضافة ulimit -HSn 102400 في نهاية ملف /etc/profile، وهذا سيتم تنفيذه تلقائيًا كلما تم تسجيل الدخول إلى الطرفية. يتطلب إعادة تشغيل workerman بعد التغيير.

الطريقة الثالثة: لجعل تغيير قيمة فتح الملفات ساري المفعول بشكل دائم، يجب تعديل ملف الإعدادات: /etc/security/limits.conf. يُمكنك إضافة السطور التالية إلى نهاية الملف:

* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000

تتطلب هذه الطريقة إعادة تشغيل الخادم لتبدأ الإعدادات الجديدة بالعمل.