سؤال

ولدي تطبيق ويب مكتوبة باستخدام CherryPy الذي يدار محليا على 127.0.0.1:4321. نحن نستخدم وزارة الدفاع إعادة كتابة وزارة الدفاع بالوكالة أن يكون أباتشي بمثابة وكيل عكسي. أباتشي يعالج أيضا تشفير SSL لدينا ويمكن في نهاية المطاف أن تستخدم لنقل جميع محتوى ثابت لدينا.

وهذا كله يعمل على ما يرام لأعباء العمل الصغيرة. ومع ذلك، كنت مؤخرا urllib2 لكتابة سيناريو الضغط الاختبار التي من شأنها أن محاكاة حجم العمل من 100 من العملاء. بعد بعض الوقت، ويحصل كل عميل خطأ 503 من طراز أباتشي، مشيرا إلى أن أباتشي لا يمكن الاتصال 127.0.0.1:4321. CherryPy يعمل بشكل صحيح، ولكن لي سجل خطأ أباتشي يكشف خطوط كما يلي:

و[Thu Oct 02 12:55:44 2008] [error] (OS 10048)Only one usage of each socket address (protocol/network address/port) is normally permitted. : proxy: HTTP: attempt to connect to 127.0.0.1:4321 (*) failed

وغوغلينغ لهذا الخطأ يكشف عن أن أباتشي وربما نفد من واصفات ملف مأخذ. منذ ليس لدي سوى 100 حالة تشغيل، وهذا يعني أن الاتصالات لم يتم مغلقة، سواء بين اتصال urllib2 بلدي وأباتشي (أنا بالتأكيد يدعو .close() على قيمة الإرجاع urlopen)، أو بين أباتشي وCherryPy.

ولقد أكد هذا الطلب urllib2 بلدي يبعث رأس Connection: close HTTP، على الرغم من أن يتم تكوين أباتشي مع KeepAlive On إذا ما يهم.

في حالة لا يهم، أنا باستخدام بايثون 2.5، اباتشي 2.2، 3.0.3 CherryPy، والخادم يعمل على Windows Server 2003.

وهكذا ما هو وجهتي المقبلة لوقف هذه المشكلة؟

هل كانت مفيدة؟

المحلول

وSetEnv proxy-nokeepalive 1 ربما اقول لكم الحق بعيدا إذا كانت المشكلة هي keepalive بين أباتشي وCP. انظر مستندات mod_proxy للحصول على مزيد من المعلومات.

نصائح أخرى

هل يمكن تشغيل الأمر netstat ومعرفة ما إذا كان لديك مجموعة من مآخذ التوصيل في حالة TIME_WAIT. اعتمادا على MaxUserPort بك الإعداد الذي قد تكون محدودة بالقسوة في عدد من المنافذ المتاحة للاستخدام. وبالإضافة إلى ذلك عادة ما يتم تعيين TcpTimedWaitDelay إلى 240 ثانية لذلك أي مآخذ التي يتم استخدامها لا يمكن استخدامها لمدة اربع دقائق.

وهناك المزيد من المعلومات الجيدة هنا -> http://smallvoid.com/ المادة / WINNT-TCPIP-ماكس-limit.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top