توقف مرحّل VPN عن قبول SSH: حدود واصفات الملفات
تستمر حركة النفق في التدفق بينما يرفض مرحّل socat خلفه الجلسات الجديدة. تتبّع المسار، ثم اقرأ الحد الموروث على PID الحيّ.
لا تزال مصافحة WireGuard تكتمل، ولا يزال القرين يعرض نقطة نهاية حديثة، ومع ذلك تتعطل جلسة SSH جديدة عبر المرحّل خلفه دون أي لافتة. تشير هذه التركيبة بعيدًا عن النفق نحو العملية التي تقبل المقبس. يجلس مرحّل مثل socat في مسار التطبيق بميزانية واصفات خاصة به، وأبناء خاصين به، وحدود موروثة خاصة به. يبدأ المشوار أدناه عند العميل ويتوقف عند أول مكوّن لا يستطيع فتح مقبس آخر.
تتبّع المسار قبل تغيير أي رقم
تتبّع طلبًا واحدًا فاشلًا بدلًا من التفكير في النفق ككل. يكتب العميل داخل النفق، ويفكّ خادم VPN التشفير ويوجّه، ويقبل المرحّل على الجانب الآخر. كل خطوة تستهلك واصفات، والخطوة التي تنفد عادةً هي الأخيرة.
ابدأ بطلب يمكنك إعادة إنتاجه وقِس زمنه. إذا اكتملت مصافحة TCP لكن لم تصل لافتة التطبيق، فقد أخذ المرحّل المقبس ثم توقّف في ابن أو على ساقه الصاعدة. وإذا لم تكتمل المصافحة نفسها أبدًا، فالسبب هو التوجيه أو الجدار الناري أو حالة المستمع، لا سقف الواصفات. سجّل أي الشكلين رأيت، لأنهما يشيران إلى عمليتين مختلفتين.
عُدّ أيضًا القفزات التي تكرّر العمل. المستمع المتفرّع يسلّم كل مقبس مقبول إلى ابن يحتفظ بنسخته الخاصة، لذا فالمجموع الحقيقي خاصية للشجرة بأكملها، لا للأب وحده.
اقرأ الحد الذي ورثه المرحّل
الحد الوحيد المهم يخص العملية الجارية، وقد ثبّته أي شيء أطلق تلك العملية. كتابة ulimit -n في صدفة تصف الصدفة. اسأل مدير الخدمة عمّا طبّقه، ثم أكّد على PID.
systemctl show -p MainPID -p LimitNOFILE vpn-relay.service
cat /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
يطبع ملف limits السقفين اللين والصلب كما تراهما العملية. قيمة لينة منخفضة تحت قيمة صلبة سخية تعني أن الخادم مسموح له برفع سقفه، وبعضها يفعل ذلك عند بدء التشغيل؛ والقيم المنخفضة المتساوية تعني أن ملف الوحدة هو المصدر.
تُحمّل الإضافات بترتيب معجمي وتفوز الملفات اللاحقة، لذا فإن systemctl cat vpn-relay.service هو الرأي المرجعي لما ينطبق. تحرير ملف لا يقرأه المدير أبدًا هو السبب الأكثر شيوعًا لعدم تأثير رقم مرفوع.
افصل التزامن المستقر عن الحالة المحتفظ بها
يمكن لعمليتين بلوغ السقف نفسه لأسباب غير مترابطة، والعلاجات مختلفة. الطلب الذي يتبع جلسات متزامنة مفيدة هو مسألة سعة. النمو الذي يستمر بعد انتهاء العمل هو تسرّب أو مجموعة جلسات لم يغلقها أحد.
قِس عند الخمول، وعند ذروتك المعتادة، ومرة أخرى بعد بضع دقائق من توقف الحمل. عدّ المدخلات المفتوحة بـ ls /proc/PID/fd | wc -l مقابل الحد اللين يخبرك بالفجوة، وعدد أقل بواحد أو اثنين من السقف هو توقف صلب لا مسار بطيء.
عندما يرفض العدد الانخفاض، انظر إلى حالات المقابس لا إلى الإجماليات. الواصفات الجالسة في CLOSE_WAIT تعني أن القرين أغلق وجانبك لم يفعل، وهو عيب في دورة حياة التطبيق لا يؤجّله سوى حد أكبر. حدّد نموذج الأبناء أيضًا: مرحّل متفرّع بلا حد للأبناء المتزامنين يستنفد الواصفات وخانات العمليات والذاكرة معًا.
تحقّق من القيمة الجديدة على العملية الحيّة
بعد تحرير الوحدة، أعد تحميل المدير وأعد تشغيل الخدمة، لأن إعادة التحميل وحدها لا تستبدل أبدًا حدودًا ورثتها عملية جارية. تحقّق على العملية التي تخدم الحركة فعليًا.
systemctl daemon-reload
systemctl restart vpn-relay.service
awk '/Max open files/ {print}' /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
ss -tnp state established '( sport = :2222 )' | wc -l
يعيد سطر awk الزوج الجديد؛ فإن كان لا يزال يعرض القديم، فالإضافة التي حرّرتها ليست التي تُحمّل. عدد ss هو فحص حملك، فافتح عدد الجلسات الذي تتوقعه وراقبه يصعد. العدد الذي يستمر في الارتفاع بعد إغلاق تلك الجلسات يعني أن الحد لم يكن المشكلة كلها أبدًا.
يخص أي زيادة كبيرة تحذير واحد. التطبيقات التي تستطلع بـ select() لا تستطيع مراقبة الواصفات فوق FD_SETSIZE، وهو 1024 في البناءات المعتادة، لذا فسقف مرفوع فوق ذلك قد ينتج أعطالًا تبدو غير ذات صلة. ويحمل مرجع تنفيذ systemd التحذير نفسه للخدمات التي يطلقها.
أبعِد إعادة التشغيل عن توافر النفق
إعادة تشغيل المرحّل تُسقط جلساته النشطة، وذلك حدث منفصل عن انقطاع VPN. رتّب التغيير بحيث يبقى النفق قائمًا بينما يدور المرحّل، وحذّر أي شخص تعبر جلسته الطويلة هذا التغيير.
التراجع هو ملف الوحدة السابق زائد إعادة تشغيل أخرى، ويبقى ذلك الملف في مكانه حتى تصمد القيمة الجديدة يوم عمل كاملًا. ثم أغلق الحلقة بالطلب الذي فشل أصلًا: جلسة SSH جديدة عبر المرحّل، ونقل طويل بما يكفي ليُهم، وعدد واصفات يعود إلى مستواه الخامل.