حل مشكلة "عدد كبير جدًا من الملفات المفتوحة"

عرض الفئات

حل مشكلة "عدد كبير جدًا من الملفات المفتوحة"

2 دقائق للقراءة

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

إذا وصل أحد العمليات إلى الحد الأقصى لعدد واصفات الملفات، فلن يتمكن من فتح ملفات أو منافذ إضافية، وقد يُصدر النظام الخطأ التالي:

عدد كبير جدًا من الملفات المفتوحة

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

تشرح هذه المقالة كيفية عمل حدود واصفات الملفات في RELIANOID الأنظمة وكيف يمكن للمسؤولين تعديلها عند الضرورة.

كيفية عمل حدود واصفات الملفات #

يدير نظام لينكس واصفات الملفات من خلال نوعين رئيسيين من القيود:

  • حدود النظام ككل
  • حدود كل عملية

يجب ضبط كليهما بشكل مناسب لضمان التشغيل المستقر.

حدود واصفات الملفات على مستوى النظام #

يفرض نظام لينكس حدًا أقصى عالميًا لعدد مُعرّفات الملفات التي يمكن تخصيصها عبر النظام بأكمله. ويتم التحكم في هذه القيمة بواسطة مُعامل النواة التالي: fs.file-max

يمكنك عرض القيمة الحالية باستخدام:

sysctl fs.file-max

مثال على الناتج:

fs.file-max = 1000000

هذا يعني أن النظام يستطيع تخصيص ما يصل إلى مليون مُعرّف ملف إجمالاً. إذا تم الوصول إلى هذا الحد، فلن يكون بالإمكان إنشاء مُعرّفات ملفات جديدة حتى يتم تحرير المُعرّفات الموجودة.

يمكن للمسؤولين، عند الحاجة، زيادة القيمة مؤقتًا باستخدام:

sysctl -w fs.file-max=2000000

لجعل التغيير دائمًا بعد إعادة التشغيل، أضف المعلمة إلى: /etc/sysctl.conf

على سبيل المثال:

fs.file-max = 2000000

قم بتطبيق الإعدادات باستخدام:

سيسكتل -ص

حدود واصفات الملفات لكل عملية #

بالإضافة إلى الحد الأقصى العام للنظام، لكل عملية حدها الخاص لعدد الملفات المفتوحة التي يمكنها التعامل معها. ويتم التحكم في هذا الحد باستخدام ulimit.

يمكنك التحقق من الحد الحالي باستخدام:

ulimit -n

مثال على الناتج:

100000

يشير هذا إلى أن عملية واحدة يمكنها فتح ما يصل إلى 100,000 واصف ملف.

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

حدود واصفات الملفات في RELIANOID #

RELIANOID تقوم الخدمات بتحميل حدود واصفات الملفات لكل عملية من ملف التكوين التالي:

/etc/profile/relianoid.sh

هذا يضمن أن RELIANOID تعمل المكونات ضمن الحدود المطلوبة للتعامل مع أعداد كبيرة من اتصالات الشبكة.

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

تعديل الحدود لعمليات الطرف الثالث #

إذا كان تطبيق تابع لجهة خارجية يتطلب حدودًا أعلى لوصف الملفات، فيمكن تهيئتها في: /etc/security/limits.conf

فمثلا:

* ملف برمجي بدون ملف 200000 * ملف صلب بدون ملف 200000

يؤدي هذا الإعداد إلى زيادة عدد الملفات المفتوحة المسموح بها لجميع المستخدمين.

أو بدلاً من ذلك، يمكن تطبيق القيود على مستخدم معين:

ncpa soft nofile 200000 ncpa hard nofile 200000

بعد تطبيق التغييرات، أعد تشغيل الخدمة أو العملية المتأثرة حتى يتم تحميل الحدود المحدثة.

خاتمة #

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

ولتجنب هذه الحالة، ينبغي على المسؤولين التأكد من أن كلاً من حدّ مُعرّفات الملفات على مستوى النظام (fs.file-max) و حد لكل عملية يحددها ulimit تم تكوينها بشكل صحيح.

In RELIANOID يتم تحميل حدود الأنظمة والخدمات ذات الصلة من /etc/profile/relianoid.shومع ذلك، قد تتطلب تطبيقات الطرف الثالث التي تعمل على نفس الجهاز تكوينًا إضافيًا من خلال /etc/security/limits.conf بحيث ترث حدود واصفات الملفات المناسبة.

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

📄 قم بتنزيل هذه الوثيقة بصيغة PDF #

    ُ:البريد الالكتروني *