loulou ange
11-02-2013, بتوقيت غرينيتش 01:53 AM
بسم الله الرحمن الرحيم
من اهم المواضيع التى تواجه اصحاب السيرفر SERVERات وهى شرح كيفية تحسين الاداء والسرعة الخاصة بالويب سيرفر SERVER (الاباتشى).
ليس الحل دائما عند مواجه مشاكل فى الاداء والسرعة ان تقوم بترقية upgrade العتاد(Hardware). ولكن فى بعض الحالات تغيير احد اعدادت الاباتشى كفيل بتحسين الاداء 4 اضعاف.
لذلك قبل ان تقرر شراء سيرفر SERVER جديد او ترقية upgrade سيرفر SERVERك. ان تقوم بتجربة سلسلة من التغييرات فى الاعدادات الخاصة بالويب سيرفر SERVER (الاباتشى)
لذلك في هذا الموضوع سأقوم بمناقشة الاعدادات التي يمكن تغييرها للحصول على أداء أفضل
لموقعك.
هناك بعض المصطلحات والاساسيات يجب التعرف عليها اولا:
Configurations في أي نظام هي سلسلة من حلقات مترابطة تؤثر على بعضها ، فرفع قيمة معينة قد لا يجدي نفعا ً الا اذا خفضت قيمة أخرى ، و العكس صحيح ، اذا ً عليك أن تعرف مبدئيا ً أن التأثير الايجابي لتغيير العدادات يأتي من توليفه معينة من العدادات و ليس بتعديل كل خاصية على حده. لهذا السبب أيضا ً يتطلب الامر منك التجربة و العمل بطريقة المحاولة و الخطأ
Trial & Error و رصد كافة التغيرات التي تطرأ للوصول إلى التوليفة المناسبة لموقعك .
ملف الاعدادات الخاص بالاباتشى httpd.conf
أولا ً : إختيار الـ MPMالمناسب
سيرفر SERVERات الاباتشي يمكن بنائها بحيث تتضمن أحد هذه الانواع من وحدات المعالجة المتعددة - Multi Processing Modules و التي تكون وظيفتها بشكل رئيسي تحديد طريقة اتصال السيرفر SERVER بالشبكة و معالجة الطلبات القادمة HTTP Requestsو الرد عليها . HTTP Responses
وحدات المعالجة MPMفي الاباتشي هي :
1- وحدة المعالجة : Prefork
- وحدة متعددة العمليات ، Processesكل عملية تحتوي على Threadواحدة ، و العملية Process هي التي تتولى عملية الرد على الطلبات HTTP Requests / Responses
- كل عملية Processيمكن أن تعمل بحساب مستخدم موجود على النظام ، مما يجعل وحدة المعالجة Preforkأفضل من الناحية الامنية
- لكون كل عملية Processتحتوي على Threadواحدة ، فإن وحدة المعالجة Preforkتستهلك ذاكرة أعلى و قدرتها الادائية أقل.
2- وحدة المعالجة : Worker
- وحدة متعددة العمليات ، Processesكل عملية يمكن أن تحتوي على أكثر من ، Threadو الـ Thread الواحد هو الذي يتولى عملية الرد على الـ HTTP Requests / Responses
- أقل إستهلاكا للذاكرة و أدائها أفضل ، خيار مثالي اذا كان سرعة الاداء أولوية قصوى لك
- عمليات المعالجة غير معزولة بشكل كامل ، كل عملية Processيمكنها أن تقوم بعدد غير محدود من عمليات المعالجة لكون الـ Threadهو من يستقبل الطلب و ليس العملية Process
3- وحدة المعالجة Winnt
- اذا كنت تشغل الاباتشي على ويندوز ، فهذا هو الخيار الوحيد لك
- لأن ويندوز نظام يعالج الـ Threadsبشكل أفضل من العمليات ، Processesفإن هذه الوحدة تعمل بـ Processواحدة فقط و عدد من الـ . Threads
تذكر أنه يمكنك إختيار واحد فقط من هذه الوحدات لكي يعمل الاباتشي بها ، و يتم اختيارها عند عملية الـ . Compilationإختيار وحدة المعالجة MPMالمناسبة يعتمد كليا ً على أولوياتك و على عدد من العوامل ، مثل دعم نظام التشغيل للـ Threadsو عدد المعالجات و حجم الذاكرة و نوعيتها في السيرفر SERVER و كذلك على طبيعة الترافيك القادمة للموقع و كمية الـ HTTP Requests
ثانيا ً : إعدادات وقت التشغيل Run-Time
جميع الاعدادات التي سنتحدث عنها ستجدها في ملف httpd.confوهو الملف المسؤول عن إعدادات الاباتشي . لاحظ هنا أنني سأشرح طريقة الاعدادات الخاصة بوحدة المعالجة Workerحيث أنها الوحدة التي ينصح بإستخدامها غالبا ً في السيرفر SERVERات الحديثة التي تدعم الـ ، Threadsبعض الاعدادات التي سأشرح طريقةها مشتركة بين النوعين .
*ملحوظة:
صفحات الـ php تستخدم الـ thread safe لذلك تستخدم معها الـ prefork mpm.
ويمكن ايضا تشغيل الـ php على worker mpm مع mod_fcgid كما هو الحال مع الـ Nginx
* لمعرفة الـ MPM المستخدم
قم بتطبيق هذا الامر :
عن طريق البحث عن الـ Module
prefork.c او worker.c
فى هذه الحالة الـ MPM المستخدم هو الـ prefork
1- HostnameLookups
هذا الموجه Directiveمستنزف حقيقي للترافك و الوقت من سيرفر SERVER ك ، حيث يقوم بعملية فحص للـ ) DNSأو ما يعرف بـ ( DNS Lookupو ذلك لكل طلب يصل للسيرفر SERVER ! حيث يقوم بفحص أي بي الزائر و التحقق من مصدره و نطاقه لتسجيله في سجلت الدخول . access_logعملية لا أجد حاجة لها في معظم السيرفر SERVERات ، لذا تأكد أن قيمة هذا الموجه هي . Off
“HostnameLookups Off “
2- AllowOverride
هذا الموجه Directiveيخبر الباتشي ما اذا كانت ملفات الـ . htaccessعلى السيرفر SERVER يمكن إعادة تجاوزها في أي مسار على السيرفر SERVER ، فمثل ً اذا كانت قيمة AllowOverrideهي ، Allو عند قدوم طلب لتصفح العنوان التالي / index.phpفإن الاباتشي سيقوم بالتجول في المجلدات الفرعية /1 subو /2 sub1/subو / ! sub1/sub2/sub3تخيل ان هذه العملية تتم عند كل طلب ! لا داعي لذلك ، اذا احتجت استخدام ملفات . htaccessفأجعلها في كل مجلد في موقعك و ل تعتمد على أن السيرفر SERVER سيستطيع رؤيتها من أي مكان .
3- MaxClients
قيمة هذا الموجه حساسة و مهمة للوصول إلى أفضل أداء ممكن ، سواء كنت تستخدم وحدة المعالجة Preforkأو . Workerهنا يمكنك تحديد العدد الاقصى من العمليات Processesأو إجمالي عدد الـ Threads التي ستعمل في السيرفر SERVER لخدمة الزوار و إستقبال الطلبات . HTTP Requestsلو كنت تستخدم وحدة المعالجة Preforkفإن ضبط قيمة MaxClientsسيكون سهل ، و لكن بما أننا قررنا الحديث عن وحدة المعالجة Workerفإن عملية الضبط ستكون أصعب بكثير.
MaxClientsفي وحدة المعالجة Workerتعني عدد الطلبات HTTP Requestsالتي يمكن للسيرفر SERVER إستقبالها في نفس اللحظة . المشكلة هنا أنك تريد وضع رقم يسمح لسيرفر SERVER ك بتقديم أفضل أداء و لا يجعل الزائر ينتظر حتى يحصل على إتصال و بنفس الوقت لا تريد الرقم أن يصبح كبيرا ً جدا ً ليستهلك الذاكرة و يرهق موارد النظام . حسنا ً أظن أنك خمنت الحل ، لا يوجد معادلة أو قيمة سحرية ، ذلك يعتمد كليا ً على طبيعة الطلبات التي ترد لموقعك وحجمها و تزامنها ، لذلك فأنت تحتاج إلى تجربة عدة قيم حتى تصل للقيمة المثلى. أبقي عينيك على إستهلاك الذاكرة مع كل تغيير . كما حاول تغيير ThreadsPerChildو التي سنتحدث عنه بعد قليل.
4- ThreadsPerChild
في وحدة المعالجة Workerمن يقوم بعملية استقبال الطلب و معالجته فعليا ً هو الـ Threadو ليس الـ ، Processلذلك فإن تحديد عدد الـ Threadsلكل عملية Processقائمة هو أمر مهم. هذا الموجه Directiveسيعتمد عليه الباتشي في تحديد عدد العمليات الـ Processesالتي سينشأها الاباتشي . حين يضطر الاباتشي لانشاء Processجديدة ، فإنه يقوم بإنشاء Threadsبالعدد الذي تحدده هنا ، سواء كان هناك طلبات إتصال بهذا العدد أو لا ، فإن جميع الـ Threadsسيتم إنشائها بمجرد إنشاء الـ Process الجديدة ، لذلك كن حذر من رفع العدد بصورة مبالغ فيها. الخطورة هنا تكمن في أن حدوث مشكلة جذرية في أحد الـ Threadsقد يؤدي إلى توقف الـ Process كاملها عن العمل و قتلها من قبل النظام . أحد أكثر الاسباب التي تؤدي إلى ذلك هو رفع قيمة الـ ThreadsPerChildإلى قيمة أعلى مما ينبغي.
5- StartServers
هذا الموجه Directiveالذي يسمح لك بتحديد عدد الـ Processesالذي سيبدأ فيه الباتشي عند أول تشغيل له ، كل Processبالتأكيد ستقوم بإنشاء عدد من الـ Threadsالمحدد في الموجه . ThreadsPerChild
6- MinSpareThreads
أقل عدد من الـ Threadsسيبقيه الاباتشي متواجد و متصل لخدمة الطلبات القادمة ، حتى لو لم يكن هناك حاجة لها في تلك اللحظة. سيقوم الباتشي بإنشاء Processجديدة لضمان هذا الحد الدنى من الـ Threadsاذا لزم الامر.
7- MaxSpareThreads
أقصى عدد من الـ Threadsسيبقيه الاباتشي متواجد و متصل لخدمة الطلبات القادمة كإحتياطي )أي في حال عدم وجود طلب على السيرفر SERVER يستدعي هذا الحد(. سيقوم الاباتشي بإنهاء أي Processتعمل و ذلك لتخفيض عدد الـ Threadsتحت هذا العدد.
8 – MaxRequestsPerChild
هذا هو عدد الطلبات HTTP Requestsالذي ستقوم الـ Processبخدمتها بكل الـ Threadsالمتواجدة فيها ، قبل أن تعلن إعتزالها و تخرج من الذاكرة ! لو فرضنا أن العدد هو 0001 ، هذا يعني ان كل Process ستقوم بخدمة ألف طلب ثم تغلق جميع المنافذ ويقوم الباتشي بإنهاء خدماتها !. القيمة الافتراضية لهذه الخاصية هي 0 )صفر( ، و التي تعني انه ل حدود لعدد الطلبات التي سيتولى تلبيتها كل Processو لن يتم إنهاء خدمات أي منها ال اذا كان الغرض من الانهاء الوصول إلى MaxSpareThreadsفي حالة قلة الطلب على السيرفر SERVER.
و لكن ، لماذا يكون من الضروري أحيانا ً ان يقوم الباتشي بإنهاء خدمات أي Processبعد تأديتها عدد من الطلبات ؟ حسنا ً ، هذا يفيد لتفادي مشاكل تسرب الذاكرة Memory Leakالتي تنتج بسبب بقاء العملية لوقت طويل جد ا ً في الذاكرة مما يجعل مخلفات هذه العملية تتراكم بسبب خلل في عملية تجميع المخلفات . Garbage Collectionاضف إلى ذلك حاجة السيرفر SERVER بشكل عام إلى إستخدام أجزاء من الذاكرة لعمليات أخرى مختلفة ليس لها علاقة بالاباتشي.
9- mod_deflate
هذه الوحدة Moduleيمكنك تضمينها من خلل ملف httpd.confو ستعمل على ضغط الردود HTTP Responsesعلى الطلبات مما يوفر الترافك بنسبة تصل إلى 57 % في بعض الحيان. يمكنك تحديد أنواع الملفات التي ستتعرض للضغط . لحظ ان عملية الضغط بحد ذاتها تستغرق وقت ، لذا يجب عليك الموازنه بين حاجتك لضغط الملفات لتسريع نقلها و بين الوقت الذي ستسغرقه عملية الضغط هذه.
10 – mod_expires
هذه الوحدة مسؤولة عن عملية التحكم بالتخزين المؤقت Cachingعلى جهاز المستخدم و ذلك بتحديد تاريخ إنتهاء صلاحية المحتوى حسب عدة عوامل مثل تاريخ التعديل أو تاريخ الوصول للملف. مثل ً :
”ExpiresByType text/html “access plus 1 month 15 days 2 hours
في هذا السطر حددت تاريخ صلاحية ملفات الـ HTMLلمدة شهر واحد و 51 يوم و ساعتين و ذلك من تاريخ الوصول اليها ، بمعنى عند تصفح الزائر لصفحتك لول مرة فأنها ستخزن في ملفاته المؤقته و سيستمر في تصفحها من الملفات المؤقته لمدة شهر و 51 يوم و ساعتين عند طلبها مجددا ً ، سيلغى هذا الشرط اذا حذف الزائر ملفاته المؤقته أو طلب بشكل صريح أحدث نسخة من الصفحة
CTRL + F5
هناك تطبيقات و خصائص كثيرة لهذا الـ ، Moduleأنصح بالقراءة عنه بشكل متعمق.
11- KeepAlive
لبقاء الاتصال مفتوحا ً مع الزائر ، هذه الخاصية تسمح بسرعة تنفيذ الطلبات بدل ً من إغلاق الاتصال و فتحه عند كل طلب يأتي من نفس الزائر ، يمكنك السماح بها Onأو إغلقها . Offهناك خاصيتان مرتبطتان بهذا الموجه:
: KeepAliveTimeoutعدد الثواني الذي سيظل التصال فيها مفتوحا ً مع الزائر قبل أن يتم إغلاقه ، رفع هذه القيمة قد يؤدي إلى حجز عدد كبير من التصالت لمدة طويلة مع عدد محدد من الزوار مما يؤخر خدمة زوار آخرين ! في وحدة المعالجة Workerقد تكون0 1 أو 51 ثانية قيمة عادلة. ولكن ذلك يعتمد كليا ً على عدد العناصر في صفحات موقعك و حجمها و سرعة التحميل و تدفق الزوار في نفس
اللحظة !
: MaxKeepAliveRequestsعدد الطلبات التي سيرد عليها الـ Threadأثناء عملية الاتصال الواحدة TCP Connectionقبل أن يقوم بإغلق الاتصال مجبرا ً متصفح الزائر على طلب إتصال جديد. أيضا ً تعتمد هذه الخاصية على عدد العناصر في صفحات موقعك و طبيعة تصفح زوار الموقع لموقعك وسرعة تنقلهم بين الصفحات.
12 - ExtendedStatus
قم باغلاق هذه الخاصية بوضعها على الوضع Offو ذلك لن الاباتشي سيقوم بعدد من العمليات مع كل طلب يأتي اذا كانت هذه الخاصية في الوضع . Onهذه الخاصية تقوم بتحديث update إحصائيات السيرفر SERVER و عدد الطلبات التي يخدمها في اللحظه . لا تحتاج لهذا في الغالب الا لتتبع مشكلة ، قم بإغلقها و شغلها فقط عند الحاجة.
13 – Timeout
في حال فشل أحد الطلبات في الوصول بشكل كامل و صحيح للسيرفر SERVER ، فكم ثانية يجب على الـ Threadأن تنتظر قبل أن تعلن إنتهاء الوقت و فشل الطلب و الانتقال لخدمة طلب آخر. قم بتقليل هذه المدة إلى حد معقول. تقليلها بشكل مبالغ فيه قد يؤدي إلى إغلاق الاتصالات بشكل متزايد في وجه الطلبات التي تستغرق ثواني إضافية كي يكتمل وصولها !!
والله ولى التوفيق
Source: geeker.co
https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©
من اهم المواضيع التى تواجه اصحاب السيرفر SERVERات وهى شرح كيفية تحسين الاداء والسرعة الخاصة بالويب سيرفر SERVER (الاباتشى).
ليس الحل دائما عند مواجه مشاكل فى الاداء والسرعة ان تقوم بترقية upgrade العتاد(Hardware). ولكن فى بعض الحالات تغيير احد اعدادت الاباتشى كفيل بتحسين الاداء 4 اضعاف.
لذلك قبل ان تقرر شراء سيرفر SERVER جديد او ترقية upgrade سيرفر SERVERك. ان تقوم بتجربة سلسلة من التغييرات فى الاعدادات الخاصة بالويب سيرفر SERVER (الاباتشى)
لذلك في هذا الموضوع سأقوم بمناقشة الاعدادات التي يمكن تغييرها للحصول على أداء أفضل
لموقعك.
هناك بعض المصطلحات والاساسيات يجب التعرف عليها اولا:
Configurations في أي نظام هي سلسلة من حلقات مترابطة تؤثر على بعضها ، فرفع قيمة معينة قد لا يجدي نفعا ً الا اذا خفضت قيمة أخرى ، و العكس صحيح ، اذا ً عليك أن تعرف مبدئيا ً أن التأثير الايجابي لتغيير العدادات يأتي من توليفه معينة من العدادات و ليس بتعديل كل خاصية على حده. لهذا السبب أيضا ً يتطلب الامر منك التجربة و العمل بطريقة المحاولة و الخطأ
Trial & Error و رصد كافة التغيرات التي تطرأ للوصول إلى التوليفة المناسبة لموقعك .
ملف الاعدادات الخاص بالاباتشى httpd.conf
أولا ً : إختيار الـ MPMالمناسب
سيرفر SERVERات الاباتشي يمكن بنائها بحيث تتضمن أحد هذه الانواع من وحدات المعالجة المتعددة - Multi Processing Modules و التي تكون وظيفتها بشكل رئيسي تحديد طريقة اتصال السيرفر SERVER بالشبكة و معالجة الطلبات القادمة HTTP Requestsو الرد عليها . HTTP Responses
وحدات المعالجة MPMفي الاباتشي هي :
1- وحدة المعالجة : Prefork
- وحدة متعددة العمليات ، Processesكل عملية تحتوي على Threadواحدة ، و العملية Process هي التي تتولى عملية الرد على الطلبات HTTP Requests / Responses
- كل عملية Processيمكن أن تعمل بحساب مستخدم موجود على النظام ، مما يجعل وحدة المعالجة Preforkأفضل من الناحية الامنية
- لكون كل عملية Processتحتوي على Threadواحدة ، فإن وحدة المعالجة Preforkتستهلك ذاكرة أعلى و قدرتها الادائية أقل.
2- وحدة المعالجة : Worker
- وحدة متعددة العمليات ، Processesكل عملية يمكن أن تحتوي على أكثر من ، Threadو الـ Thread الواحد هو الذي يتولى عملية الرد على الـ HTTP Requests / Responses
- أقل إستهلاكا للذاكرة و أدائها أفضل ، خيار مثالي اذا كان سرعة الاداء أولوية قصوى لك
- عمليات المعالجة غير معزولة بشكل كامل ، كل عملية Processيمكنها أن تقوم بعدد غير محدود من عمليات المعالجة لكون الـ Threadهو من يستقبل الطلب و ليس العملية Process
3- وحدة المعالجة Winnt
- اذا كنت تشغل الاباتشي على ويندوز ، فهذا هو الخيار الوحيد لك
- لأن ويندوز نظام يعالج الـ Threadsبشكل أفضل من العمليات ، Processesفإن هذه الوحدة تعمل بـ Processواحدة فقط و عدد من الـ . Threads
تذكر أنه يمكنك إختيار واحد فقط من هذه الوحدات لكي يعمل الاباتشي بها ، و يتم اختيارها عند عملية الـ . Compilationإختيار وحدة المعالجة MPMالمناسبة يعتمد كليا ً على أولوياتك و على عدد من العوامل ، مثل دعم نظام التشغيل للـ Threadsو عدد المعالجات و حجم الذاكرة و نوعيتها في السيرفر SERVER و كذلك على طبيعة الترافيك القادمة للموقع و كمية الـ HTTP Requests
ثانيا ً : إعدادات وقت التشغيل Run-Time
جميع الاعدادات التي سنتحدث عنها ستجدها في ملف httpd.confوهو الملف المسؤول عن إعدادات الاباتشي . لاحظ هنا أنني سأشرح طريقة الاعدادات الخاصة بوحدة المعالجة Workerحيث أنها الوحدة التي ينصح بإستخدامها غالبا ً في السيرفر SERVERات الحديثة التي تدعم الـ ، Threadsبعض الاعدادات التي سأشرح طريقةها مشتركة بين النوعين .
*ملحوظة:
صفحات الـ php تستخدم الـ thread safe لذلك تستخدم معها الـ prefork mpm.
ويمكن ايضا تشغيل الـ php على worker mpm مع mod_fcgid كما هو الحال مع الـ Nginx
* لمعرفة الـ MPM المستخدم
قم بتطبيق هذا الامر :
عن طريق البحث عن الـ Module
prefork.c او worker.c
فى هذه الحالة الـ MPM المستخدم هو الـ prefork
1- HostnameLookups
هذا الموجه Directiveمستنزف حقيقي للترافك و الوقت من سيرفر SERVER ك ، حيث يقوم بعملية فحص للـ ) DNSأو ما يعرف بـ ( DNS Lookupو ذلك لكل طلب يصل للسيرفر SERVER ! حيث يقوم بفحص أي بي الزائر و التحقق من مصدره و نطاقه لتسجيله في سجلت الدخول . access_logعملية لا أجد حاجة لها في معظم السيرفر SERVERات ، لذا تأكد أن قيمة هذا الموجه هي . Off
“HostnameLookups Off “
2- AllowOverride
هذا الموجه Directiveيخبر الباتشي ما اذا كانت ملفات الـ . htaccessعلى السيرفر SERVER يمكن إعادة تجاوزها في أي مسار على السيرفر SERVER ، فمثل ً اذا كانت قيمة AllowOverrideهي ، Allو عند قدوم طلب لتصفح العنوان التالي / index.phpفإن الاباتشي سيقوم بالتجول في المجلدات الفرعية /1 subو /2 sub1/subو / ! sub1/sub2/sub3تخيل ان هذه العملية تتم عند كل طلب ! لا داعي لذلك ، اذا احتجت استخدام ملفات . htaccessفأجعلها في كل مجلد في موقعك و ل تعتمد على أن السيرفر SERVER سيستطيع رؤيتها من أي مكان .
3- MaxClients
قيمة هذا الموجه حساسة و مهمة للوصول إلى أفضل أداء ممكن ، سواء كنت تستخدم وحدة المعالجة Preforkأو . Workerهنا يمكنك تحديد العدد الاقصى من العمليات Processesأو إجمالي عدد الـ Threads التي ستعمل في السيرفر SERVER لخدمة الزوار و إستقبال الطلبات . HTTP Requestsلو كنت تستخدم وحدة المعالجة Preforkفإن ضبط قيمة MaxClientsسيكون سهل ، و لكن بما أننا قررنا الحديث عن وحدة المعالجة Workerفإن عملية الضبط ستكون أصعب بكثير.
MaxClientsفي وحدة المعالجة Workerتعني عدد الطلبات HTTP Requestsالتي يمكن للسيرفر SERVER إستقبالها في نفس اللحظة . المشكلة هنا أنك تريد وضع رقم يسمح لسيرفر SERVER ك بتقديم أفضل أداء و لا يجعل الزائر ينتظر حتى يحصل على إتصال و بنفس الوقت لا تريد الرقم أن يصبح كبيرا ً جدا ً ليستهلك الذاكرة و يرهق موارد النظام . حسنا ً أظن أنك خمنت الحل ، لا يوجد معادلة أو قيمة سحرية ، ذلك يعتمد كليا ً على طبيعة الطلبات التي ترد لموقعك وحجمها و تزامنها ، لذلك فأنت تحتاج إلى تجربة عدة قيم حتى تصل للقيمة المثلى. أبقي عينيك على إستهلاك الذاكرة مع كل تغيير . كما حاول تغيير ThreadsPerChildو التي سنتحدث عنه بعد قليل.
4- ThreadsPerChild
في وحدة المعالجة Workerمن يقوم بعملية استقبال الطلب و معالجته فعليا ً هو الـ Threadو ليس الـ ، Processلذلك فإن تحديد عدد الـ Threadsلكل عملية Processقائمة هو أمر مهم. هذا الموجه Directiveسيعتمد عليه الباتشي في تحديد عدد العمليات الـ Processesالتي سينشأها الاباتشي . حين يضطر الاباتشي لانشاء Processجديدة ، فإنه يقوم بإنشاء Threadsبالعدد الذي تحدده هنا ، سواء كان هناك طلبات إتصال بهذا العدد أو لا ، فإن جميع الـ Threadsسيتم إنشائها بمجرد إنشاء الـ Process الجديدة ، لذلك كن حذر من رفع العدد بصورة مبالغ فيها. الخطورة هنا تكمن في أن حدوث مشكلة جذرية في أحد الـ Threadsقد يؤدي إلى توقف الـ Process كاملها عن العمل و قتلها من قبل النظام . أحد أكثر الاسباب التي تؤدي إلى ذلك هو رفع قيمة الـ ThreadsPerChildإلى قيمة أعلى مما ينبغي.
5- StartServers
هذا الموجه Directiveالذي يسمح لك بتحديد عدد الـ Processesالذي سيبدأ فيه الباتشي عند أول تشغيل له ، كل Processبالتأكيد ستقوم بإنشاء عدد من الـ Threadsالمحدد في الموجه . ThreadsPerChild
6- MinSpareThreads
أقل عدد من الـ Threadsسيبقيه الاباتشي متواجد و متصل لخدمة الطلبات القادمة ، حتى لو لم يكن هناك حاجة لها في تلك اللحظة. سيقوم الباتشي بإنشاء Processجديدة لضمان هذا الحد الدنى من الـ Threadsاذا لزم الامر.
7- MaxSpareThreads
أقصى عدد من الـ Threadsسيبقيه الاباتشي متواجد و متصل لخدمة الطلبات القادمة كإحتياطي )أي في حال عدم وجود طلب على السيرفر SERVER يستدعي هذا الحد(. سيقوم الاباتشي بإنهاء أي Processتعمل و ذلك لتخفيض عدد الـ Threadsتحت هذا العدد.
8 – MaxRequestsPerChild
هذا هو عدد الطلبات HTTP Requestsالذي ستقوم الـ Processبخدمتها بكل الـ Threadsالمتواجدة فيها ، قبل أن تعلن إعتزالها و تخرج من الذاكرة ! لو فرضنا أن العدد هو 0001 ، هذا يعني ان كل Process ستقوم بخدمة ألف طلب ثم تغلق جميع المنافذ ويقوم الباتشي بإنهاء خدماتها !. القيمة الافتراضية لهذه الخاصية هي 0 )صفر( ، و التي تعني انه ل حدود لعدد الطلبات التي سيتولى تلبيتها كل Processو لن يتم إنهاء خدمات أي منها ال اذا كان الغرض من الانهاء الوصول إلى MaxSpareThreadsفي حالة قلة الطلب على السيرفر SERVER.
و لكن ، لماذا يكون من الضروري أحيانا ً ان يقوم الباتشي بإنهاء خدمات أي Processبعد تأديتها عدد من الطلبات ؟ حسنا ً ، هذا يفيد لتفادي مشاكل تسرب الذاكرة Memory Leakالتي تنتج بسبب بقاء العملية لوقت طويل جد ا ً في الذاكرة مما يجعل مخلفات هذه العملية تتراكم بسبب خلل في عملية تجميع المخلفات . Garbage Collectionاضف إلى ذلك حاجة السيرفر SERVER بشكل عام إلى إستخدام أجزاء من الذاكرة لعمليات أخرى مختلفة ليس لها علاقة بالاباتشي.
9- mod_deflate
هذه الوحدة Moduleيمكنك تضمينها من خلل ملف httpd.confو ستعمل على ضغط الردود HTTP Responsesعلى الطلبات مما يوفر الترافك بنسبة تصل إلى 57 % في بعض الحيان. يمكنك تحديد أنواع الملفات التي ستتعرض للضغط . لحظ ان عملية الضغط بحد ذاتها تستغرق وقت ، لذا يجب عليك الموازنه بين حاجتك لضغط الملفات لتسريع نقلها و بين الوقت الذي ستسغرقه عملية الضغط هذه.
10 – mod_expires
هذه الوحدة مسؤولة عن عملية التحكم بالتخزين المؤقت Cachingعلى جهاز المستخدم و ذلك بتحديد تاريخ إنتهاء صلاحية المحتوى حسب عدة عوامل مثل تاريخ التعديل أو تاريخ الوصول للملف. مثل ً :
”ExpiresByType text/html “access plus 1 month 15 days 2 hours
في هذا السطر حددت تاريخ صلاحية ملفات الـ HTMLلمدة شهر واحد و 51 يوم و ساعتين و ذلك من تاريخ الوصول اليها ، بمعنى عند تصفح الزائر لصفحتك لول مرة فأنها ستخزن في ملفاته المؤقته و سيستمر في تصفحها من الملفات المؤقته لمدة شهر و 51 يوم و ساعتين عند طلبها مجددا ً ، سيلغى هذا الشرط اذا حذف الزائر ملفاته المؤقته أو طلب بشكل صريح أحدث نسخة من الصفحة
CTRL + F5
هناك تطبيقات و خصائص كثيرة لهذا الـ ، Moduleأنصح بالقراءة عنه بشكل متعمق.
11- KeepAlive
لبقاء الاتصال مفتوحا ً مع الزائر ، هذه الخاصية تسمح بسرعة تنفيذ الطلبات بدل ً من إغلاق الاتصال و فتحه عند كل طلب يأتي من نفس الزائر ، يمكنك السماح بها Onأو إغلقها . Offهناك خاصيتان مرتبطتان بهذا الموجه:
: KeepAliveTimeoutعدد الثواني الذي سيظل التصال فيها مفتوحا ً مع الزائر قبل أن يتم إغلاقه ، رفع هذه القيمة قد يؤدي إلى حجز عدد كبير من التصالت لمدة طويلة مع عدد محدد من الزوار مما يؤخر خدمة زوار آخرين ! في وحدة المعالجة Workerقد تكون0 1 أو 51 ثانية قيمة عادلة. ولكن ذلك يعتمد كليا ً على عدد العناصر في صفحات موقعك و حجمها و سرعة التحميل و تدفق الزوار في نفس
اللحظة !
: MaxKeepAliveRequestsعدد الطلبات التي سيرد عليها الـ Threadأثناء عملية الاتصال الواحدة TCP Connectionقبل أن يقوم بإغلق الاتصال مجبرا ً متصفح الزائر على طلب إتصال جديد. أيضا ً تعتمد هذه الخاصية على عدد العناصر في صفحات موقعك و طبيعة تصفح زوار الموقع لموقعك وسرعة تنقلهم بين الصفحات.
12 - ExtendedStatus
قم باغلاق هذه الخاصية بوضعها على الوضع Offو ذلك لن الاباتشي سيقوم بعدد من العمليات مع كل طلب يأتي اذا كانت هذه الخاصية في الوضع . Onهذه الخاصية تقوم بتحديث update إحصائيات السيرفر SERVER و عدد الطلبات التي يخدمها في اللحظه . لا تحتاج لهذا في الغالب الا لتتبع مشكلة ، قم بإغلقها و شغلها فقط عند الحاجة.
13 – Timeout
في حال فشل أحد الطلبات في الوصول بشكل كامل و صحيح للسيرفر SERVER ، فكم ثانية يجب على الـ Threadأن تنتظر قبل أن تعلن إنتهاء الوقت و فشل الطلب و الانتقال لخدمة طلب آخر. قم بتقليل هذه المدة إلى حد معقول. تقليلها بشكل مبالغ فيه قد يؤدي إلى إغلاق الاتصالات بشكل متزايد في وجه الطلبات التي تستغرق ثواني إضافية كي يكتمل وصولها !!
والله ولى التوفيق
Source: geeker.co
https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©