إغلاق مأخذ بشكل غير متوقع
-
06-07-2019 - |
سؤال
وأنا ريتينغ برنامج اختبار لخادم. في التطبيق اختبار، وأنا أحاول أن ربط عدد كبير من العملاء إلى الخادم، ولكن بعد فترة من الوقت على الحصول على كل نوع من أخطاء مثل هذه:
Connection reset by peer: socket write error
أو
java.net.SocketException: Connection reset
أو
java.net.ConnectException: Connection refused: connect
ويمكنني استخدام المقبس الجديد لكل عميل I الاتصال بالخادم.
هل يمكن لشخص ينير لي حول هذا السلوك الغريب؟
المحلول
ولسوء الحظ لم تكن قد قدمت الكثير من التفاصيل الطبيعة لخادمك. أفترض أنك تكتب الخادم TCP نموذجي. في هذه الإجابة سوف <م> لا م> الحديث عن أي تفاصيل جافا محددة.
والنصيحة المختصرة هي: إدراج تأخير بين اتصالات العملاء. وبدون ذلك كنت محاكاة بنشاط هجوم حجب الخدمة على الخادم الخاص بك.
ليعد واحد، وقراءة أدناه.
وعادة ما يخلق الخادم TCP فقط 1 <م> الاستماع م> مضروب من خلال الدعوة (في واجهة جميلة C) وظيفة int sockfd = socket(...)
، واجتياز نتيجة (sockfd
في حالتنا) لbind()
وظائف listen()
. بعد هذه الاستعدادات، فإن الخادم يطلق على accept()
التي سوف حاد الملقم في سبات (إذا تميزت المقبس كما حجب) وإذا كان العميل على الجانب الآخر من الأرض ستبدأ استدعاء دالة connect()
، من accept()
(على الخادم والجانب) بدعم من نواة نظام التشغيل خلق <م> المقبس متصل م>.
والعدد الفعلي للممكن <م> connectins انتظار م> يمكن أن يعرف من خلال النظر في وظيفة listen()
. listen()
لديها <م> المتراكمة م> المعلمة التي تحدد الحد الأقصى لعدد الصدد <م> OS نواة م> يجب الانتظار إلى نهاية (وهذا هو الأساس مبلغا من كافة الاتصالات في SYN_RCVD
وESTABLISHED
الدول). كانت تاريخيا القيمة الموصى بها ل <م> المتراكمة م> في 1980s شيء من هذا القبيل 5 والذي يعتبر بائسة الواضح في أيامنا هذه. في فري 7.2، على سبيل المثال، <م> حد القرص الثابت م> ل <م> المتراكمة م> قد خمنت بكتابة:
% sysctl kern.ipc.somaxconn kern.ipc.somaxconn: 128
ووفي فيدورا 10:
% cat /proc/sys/net/core/somaxconn 128
وP.S.
عذرا لغتي الإنجليزية الرهيبة.
نصائح أخرى
ولديك خادم الويب / التطبيق يمكن خدمة سوى كمية محدودة من العملاء في وقت واحد.
وسوف تتلقى رفض اتصال / إعادة عندما يتم التوصل إلى هذا الحد.
وعلى أمل أن يجيب عن سؤالك.
وهتاف
وهناك OS وحدود خادم مدى سرعة وعدد اتصال يمكنك البدء / قبول. إذا كنت تريد أن تفعل اختبار الأداء على الخادم، في محاولة اباتشي JMeter كما فعلت حلول لهذه الحدود.