سؤال

وهنا سؤالي الأول في ذلك.

لدي تطبيق الداخلي على الشركة التي كنت قد تم مؤخرا طرح للحفاظ على.التطبيقات التي بنيت في PHP و مشفرة بشكل جيد إلى حد ما (OO, DB التجريد ، هندى) لا شيء WTF العش.

المشكلة هي التطبيقات بطيئة جدا.

كيف يمكنني معرفة ما هو تباطؤ الطلب إلى أسفل ؟ لقد الأمثل رمز لجعل عدد قليل جدا من الاستفسارات DB إذا كنت لا تعرف أن هذا هو كود PHP والتي تأخذ بعض الوقت لتنفيذه.أنا بحاجة للحصول على بعض الأدوات التي يمكن أن تساعد لي مع هذا بحاجة إلى وضع استراتيجية من أجل التحقق من التعليمات البرمجية.

يمكنني التحقق/استراتيجية عمل نفسي ، ولكن أنا بحاجة إلى المزيد من PHP أدوات لمعرفة أين التطبيق هو التبرز حتى.

الأفكار ؟

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

المحلول

لقد استعملت XDebug التنميط مؤخرا في الحالة مشابهة.فإنه إخراج الملف الشخصي الكامل التقرير التي يمكن قراءتها مع العديد من تطبيقات التنميط ( لا أستطيع أن أعطيك قائمة على الرغم من أنني فقط تستخدم تلك التي جاءت مع سلاكوير ).

نصائح أخرى

كما خوان المذكورة ، xDebug ممتازة.إذا كنت على ويندوز ، WinCacheGrind سوف تتيح لك نظرة على التقارير.

مشاهدة هذا العرض عن طريق Rasmus Lerdorf (الخالق PHP).يذهب إلى بعض الأمثلة الجيدة من اختبار سرعة بي و ما الذي تبحث عنه وكذلك بعض الداخلية التي يمكن أن تبطئ الأشياء.XDebug هو أداة يستخدمها.كما انه يجعل قوي جدا نقطة عن معرفة ما أداء تكلفة يمكنك الدخول مع الأطر.

فيديو:http://www.archive.org/details/simple_is_hard

الشرائح (لأنه من الصعب أن نرى في الفيديو):http://talks.php.net/show/drupal08/1

هناك العديد من المتغيرات التي يمكن أن تؤثر على أداء التطبيق الخاص بك.ننصحك بأن لا تفترض على الفور PHP هي المشكلة.

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

الثاني هو أداء التطبيق بالكامل بطيئة ، أم أنه فقط يبدو أن تؤثر على بعض الصفحات ؟ هذا يمكن أن تعطيك مؤشرا أين تبدأ تحليل الأداء.إذا كان التطبيق بالكامل بطيئة ، فإن المشكلة أكثر من المحتمل في ملقم المصدر/منصة أو مع العالمي استعلام SQL التي هي جزء من كل طلب (مصادقة المستخدم على سبيل المثال).

ثالثا ، يجب ذكر تقليل عدد الاستعلامات SQL, ولكن ماذا عن تحسين الاستعلامات الموجودة?إذا كنت تستخدم MySQL هل الاستفادة من مختلف نقاط القوة لكل تخزين النظام ؟ هل تشغيل شرح على أهم الاستفسارات للتأكد من يتم فهرستها ؟ هذا أمر بالغ الأهمية على استفسارات الوصول كبير الجداول ؛ أكبر dataset أكثر ستلاحظ آثار سوء الفهرسة.لحسن الحظ, هناك العديد من المقالات مثل هذا واحد التي تشرح كيفية استخدام شرح.

الرابع, وهناك خطأ شائع هو أن نفترض أن خادم قاعدة البيانات الخاصة بك تلقائيا استخدام جميع الموارد المتاحة للنظام.يجب عليك التحقق للتأكد من أن لديك صراحة تخصيص موارد كافية إلى قاعدة البيانات الخاصة بك التطبيق.في الخلية, على سبيل المثال, سوف تحتاج إلى إضافة إعدادات مخصصة (في بلدي.cnf) عن أشياء مثل مفتاح المخزن المؤقت temp حجم الجدول, موضوع التزامن ، ك innodb تجمع المخزن المؤقت حجم الخ.

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

phpED (http://www.nusphere.com/products/phped.htm) أيضا عروض رائعة التصحيح و التنميط و القدرة على إضافة الساعات نقاط ، إلخ في كود PHP.المتكاملة التعريف مباشرة ويوفر وقت انهيار كل وظيفة استدعاء أسلوب فئة من داخل IDE.متصفح الإضافات أيضا تمكين سريعة التكامل مع فايرفوكس أو إنترنت إكسبلورر (أيزيارة بطيئة URL مع المتصفح ، ثم انقر فوق الزر الجانبي أو التصحيح).

لقد كان مفيدا جدا في الإشارة إلى حيث التطبيق بطيئة من أجل التركيز أكثر الترميز الجهد ؛ و تتجنب إضاعة الوقت الأمثل بالفعل رمز سريع.بعد أن حاول زند و الكسوف, لقد تم بيعها على سهولة استخدام phpED.

نضع في اعتبارنا كل Xdebug و phpED (مع DBG) سوف تتطلب إضافية PHP وحدة مثبتة عند التصحيح ضد الويب.phpED كما تقدم (مجربة من قبلي) المحلية التصحيح الخيار أيضا.

Xdebug الشخصي هو بالتأكيد الطريق للذهاب.آخر نصيحة - WincacheGrind جيدة ، ولكن لم يتم تحديثها مؤخرا. http://code.google.com/p/webgrind/ - في المتصفح قد تكون سهلة و سريعة بديلة.

وهناك احتمالات على الرغم من انها لا تزال قاعدة البيانات على أي حال.تحقق ذات الصلة الفهارس - و أنه لديه ما يكفي من ذاكرة إلى ذاكرة التخزين المؤقت أكبر قدر من العمل قدر ممكن من البيانات.

أيضا يمكن استخدام APD (Advanced PHP المصحح).

فإنه من السهل جدا أن تجعل من العمل.

$ php apd-test.php

$ pprofp -l pprof.SOME_PID

Trace for /Users/martin/develop/php/apd-test/apd-test.php
Total Elapsed Time = 0.12
Total System Time  = 0.01
Total User Time    = 0.07


         Real         User        System             secs/    cumm
%Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
--------------------------------------------------------------------------------------
71.3 0.06 0.06  0.05 0.05  0.01 0.01  10000  0.0000   0.0000            0 in_array
27.3 0.02 0.09  0.02 0.07  0.00 0.01  10000  0.0000   0.0000            0 my_test_function
 1.5 0.03 0.03  0.00 0.00  0.00 0.00      1  0.0000   0.0000            0 apd_set_pprof_trace
 0.0 0.00 0.12  0.00 0.07  0.00 0.01      1  0.0000   0.0000            0 main

وهناك لطيفة تعليمي كيفية تجميع APD وجعل التنميط معها : http://martinsikora.com/compiling-apd-for-php-54

ifs لها قاعدة رمز كبير في محاولة apc إذا كنت لا بالفعل.

http://pecl.php.net/package/APC

يمكنك أيضا محاولة استخدام register_tick_function وظيفة في php.الذي يحكي php استدعاء وظيفة معينة periodcally من خلال التعليمات البرمجية.ثم هل يمكن تتبع الدالة التي هي قيد التشغيل حاليا و مقدار الوقت بين المكالمات.ثم هل يمكن أن نرى ما أخذ معظم الوقت.http://www.php.net/register_tick_function

نحن نستخدم زند تطوير بيئة (ويندوز).حللنا استخدام الذاكرة ارتفاع أمس التنقل خلال مصحح الأخطاء أثناء تشغيل عملية اكسبلورر لمشاهدة الذاكرة/وحدة المعالجة المركزية/نشاط القرص حيث أن كل خط تم تنفيذها.

عملية اكسبلورر: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx.

ZDE يشمل الأداء الأساسية منشئ ملفات التعريف التي يمكن أن تظهر الوقت الذي يقضيه في كل وظيفة خلال صفحة الطلبات.

يمكنني استخدام مزيج من الكمثرى القياسي و log4php.

في الجزء العلوي من مخطوطات أريد أن ملف إنشاء كائن أن يلتف حول Benchmark_Timer الكائن.في جميع أنحاء رمز ، إضافة $object->setMarker("name");المكالمات ، خصوصا حول الاشتباه في التعليمات البرمجية.

المجمع فئة لديها تدمير الأسلوب الذي يأخذ معلومات تسجيل الدخول و يكتب عليه log4php.أنا عادة إرسال هذا syslog (العديد من ملقمات المجاميع واحد log على ملقم واحد).

في التصحيح, أنا يمكن مشاهدة ملفات الدخول و رؤية أين أنا بحاجة إلى تحسين الأمور.في وقت لاحق في الإنتاج لا يمكن تحليل ملفات السجل و لا تحليل الأداء.

ليس xdebug, لكنه دائما و يعطيني القدرة على مقارنة أي إعدام اثنين من التعليمات البرمجية.

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

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