it-swarm.asia

هل هناك أي طريقة لتشخيص البرامج النصية PHPأو بيرل التي تستهلك معظم وقت وحدة المعالجة المركزية على خادم الإنتاج؟

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

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

7
Rowland Shaw

يمكنك أيضًا القيام بالتوصيف PHP ، باستخدام أيٍ من عدد من ملفات التعريف. المفضل لدي هو XDebug:

http://www.xdebug.org/docs/profiler

لا يتطلب منك تغيير أي من البرامج النصية الخاصة بك.

هذا يجب أن يشير بسرعة إلى الاختناقات؛ وسوف يساعد أيضا مع جزء الخلية. على الرغم من أن MySQL لديها تقارير خاصة بها ، فقد تكون في موقف حيث يقوم البرنامج النصي بنفسه (سريع) في الاستعلام 1000 مرة على التوالي. لن يقوم MySQL بالإبلاغ عن هذا ، لكنك ستلاحظ من XDebug أنه قد تم استدعاء وظيفة عدة مرات لصفحة واحدة فقط.

يمكنك إجراء مسح أولي على خادم dev ؛ أي مشاكل التحسين سوف تظهر بسرعة. من سجلات الإنتاج الخاصة بك ، يمكنك معرفة الصفحات الأكثر زيارة وتحليلها أولاً على خادم dev.

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

يمكنك أيضًا تمكين ملف التعريف بشكل انتقائي مع تعيين إعداد xdebug.profiler_enable_trigger على 1. إذا تم تعيينه على 1 ، فيمكنك تمكين منشئ ملفات التعريف باستخدام متغير GET/POST أو COOKIE من الاسم XDEBUG_PROFILE

سيساعد Apache mod_rewrite في إضافة متغير GET بشفافية دون تمريره من/إلى المستخدم.

6
Erion

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

PHP Benchmarking: بشكل عام تنفيذ وقت/جهد كبير إذا كان الكود لا يتضمن بالفعل القياس. أضف مقتطفًا من الشفرة لضبط الوقت وتوقيت microtime في بداية كل برنامج نصي وتسجيل الوقت الإجمالي و microtime المنقضي في نهاية البرنامج النصي (مع URI الذي تم استدعاؤه). يمكنك إضافة مؤقتات قياس مرجعية إضافية لوظائف محددة إذا كنت قد تحتاج إلى إعادة تفعيل كودك في وقت لاحق (فقط تذكر الانتظار حتى بعد جميع العمليات العادية لديها أكملت لكتابة بياناتك المرجعية - وإلا فسوف تتداخل مع معلومات القياس).

wget Benchmarking: ربما الطريقة الأسهل لقياس. احصل على قائمة بمعرفات URI المطلوبة من سجلات خادم الويب الخاص بك وقم بإدخالها في wget كطلبات محلية ضد خادم الويب (من الأفضل أن تفعل ذلك عدة مرات بينما تكون حركة المرور منخفضة جدًا للحصول على نتائج تمثيلية)

2
danlefree