سؤال

نحن نستخدم حاليًا Apache 2.2.3 وTomcat 5 (المضمن في JBoss 4.2.2) باستخدام mod_proxy_jk كما الموصل.

هل يمكن لأي شخص إلقاء بعض الضوء على الطريقة الصحيحة لحساب/تكوين القيم أدناه (بالإضافة إلى أي شيء آخر قد يكون ذا صلة).يعمل كل من Apache وTomcat على أجهزة منفصلة ويمتلكان كميات وفيرة من ذاكرة الوصول العشوائي (4 جيجابايت لكل منهما).

أجزاء server.xml ذات الصلة:

<Connector port="8009"
           address="${jboss.bind.address}"
           protocol="AJP/1.3"
           emptySessionPath="true"
           enableLookups="false"
           redirectPort="8443"
           maxThreads="320"
           connectionTimeout="45000"
    />

أجزاء httpd.conf ذات الصلة:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>
هل كانت مفيدة؟

المحلول

يجب أن تفكر في حجم العمل الذي قد تحصل عليه الخوادم.

قد يكون العامل الأكثر أهمية هو عدد العملاء المتصلين في وقت واحد في أوقات الذروة.حاول تحديده وضبط إعداداتك بطريقة:

  • هناك ما يكفي من سلاسل المعالجة في كل من Apache وTomcat بحيث لا يحتاجون إلى إنشاء سلاسل رسائل جديدة عندما يكون الخادم محملاً بكثافة
  • لا توجد سلاسل معالجة في الخوادم أكثر مما هو مطلوب لأنها قد تؤدي إلى إهدار الموارد.

باستخدام هذا النوع من الإعداد، يمكنك تقليل أعباء الصيانة الداخلية للخوادم، مما قد يساعد كثيرًا، خاصة عندما يكون التحميل متقطعًا.

على سبيل المثال، فكر في تطبيق حيث لديك ما يقرب من 300 طلب جديد في الثانية.يتطلب كل طلب في المتوسط ​​2.5 ثانية للتنفيذ.هذا يعني أنه في أي وقت لديك ما يقرب من 750 طلبًا تحتاج إلى التعامل معها في وقت واحد.في هذه الحالة، ربما ترغب في ضبط خوادمك بحيث تحتوي على ما يقرب من 750 سلسلة معالجة عند بدء التشغيل وقد ترغب في إضافة شيء مثل ~1000 سلسلة معالجة كحد أقصى للتعامل مع الأحمال العالية للغاية.

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

نصائح أخرى

MaxClients

هذا هو الحد الأقصى الأساسي لاتصالات العميل المتوازية التي يجب على أباتشي الخاص بك التعامل معها مرة واحدة.

باستخدام الشوكة المسبقة، يمكن معالجة طلب واحد فقط لكل عملية.لذلك يمكن معالجة أباتشي بأكمله في الغالب طلبات $MaxClients في الوقت الذي تستغرقه معالجة ملف أعزب طلب.بالطبع، لا يمكن الوصول إلى هذا الحد الأقصى المثالي إلا إذا كان التطبيق يحتاج إلى أقل من 1/$MaxClients من الموارد لكل طلب.

على سبيل المثال، إذا استغرق التطبيق ثانية واحدة من وقت وحدة المعالجة المركزية للرد على طلب واحد، فإن تعيين MaxClients على أربعة سيحد من إنتاجيتك إلى أربعة طلبات في الثانية:يستخدم كل طلب اتصال Apache وسيتعامل Apache مع أربعة فقط في المرة الواحدة.ولكن إذا كان الخادم يحتوي على وحدتي CPU فقط، فلا يمكن الوصول إلى هذا حتى، لأن كل ثانية على مدار الساعة تحتوي على ثانيتين فقط من وحدة المعالجة المركزية، لكن الطلبات ستحتاج إلى أربع ثوانٍ من وحدة المعالجة المركزية.

MinSpareServers

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

يعتمد الإعداد الصحيح لهذا على عبء العمل لديك.إذا كانت لديك صفحات تحتوي على العديد من الطلبات الفرعية (الصور، وإطارات iframe، وجافا سكريبت، وcss)، فإن الوصول إلى صفحة واحدة قد يستهلك العديد من العمليات لفترة قصيرة.

MaxSpareServers

يؤدي وجود عدد كبير جدًا من عمليات Apache غير المستخدمة المعلقة إلى إهدار الذاكرة، وبالتالي يستخدم Apache رقم MaxSpareServers للحد من كمية العمليات الاحتياطية التي يحتفظ بها كاحتياطي لتدفقات الطلبات.

الحد الأقصى للطلبات لكل طفل

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

ابدأالخوادم

هذا هو مجرد مقدار العمليات التي يبدأها Apache افتراضيًا.اضبط هذا على المقدار المعتاد لعمليات Apache الجارية لتقليل وقت إحماء نظامك.حتى إذا تجاهلت هذا الإعداد، فسيستخدم Apache قيم Min-/MaxSpareServers لإنشاء عمليات جديدة كما هو مطلوب.

معلومات اكثر

أنظر أيضا وثائق وحدات المعالجة المتعددة لـ Apache.

تعد الإعدادات الافتراضية عمومًا نقاط بداية مناسبة لمعرفة ما ستحتاجه تطبيقاتك بالفعل.لا أعرف مقدار حركة المرور التي تتوقعها، لذا فإن التخمين في MaxThreads وMaxClients وMaxServers أمر صعب بعض الشيء.أستطيع أن أخبرك أن معظم العملاء الذين أتعامل معهم (يعملون لدى مضيف ويب Linux، والذي يتعامل بشكل أساسي مع العملاء الذين يقومون بتشغيل تطبيقات Java في Tomcat) يستخدمون الإعدادات الافتراضية لبعض الوقت دون الحاجة إلى الكثير من التعديلات.

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

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