الكفاءة، المقارنة المعيارية، اختبار السرعة، الأداء

StackOverflow https://stackoverflow.com/questions/487378

سؤال

أحاول أن أكتب نصًا أحاول قياس كفاءته.لدي بضعة أسئلة:-

  1. بالنسبة للتطبيقات الصغيرة، هل هذا النوع من ملفات التعريف مطلوب؟أم أنني أشعر بجنون العظمة؟(بافتراض أن معظم التعليمات البرمجية فعالة بشكل لائق/لا توجد حلقات لا نهائية)
  2. مقابل ما الذي يجب أن أقيسه؟ما الذي يجب أن أقارن به؟
  3. فيما يلي ناتج الكفاءة الذي حصلت عليه من ab.هل هذه الطريقة بعيدة جدًا؟هل أسير في الاتجاه الخاطئ عند تصميم هذا التطبيق؟هل هناك أي إشارات تحذيرية يجب أن أكون على علم بها؟
abs -n10000 -c100 http://localhost/testapp

This is ApacheBench, Version 2.3 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.2.10
Server Hostname:        localhost
Server Port:            80

Document Path:          /testapp
Document Length:        525 bytes

Concurrency Level:      100
Time taken for tests:   33.608 seconds
Complete requests:      10000
Failed requests:        5179
   (Connect: 0, Receive: 0, Length: 5179, Exceptions: 0)
Write errors:           0
Total transferred:      6973890 bytes
HTML transferred:       5253890 bytes
Requests per second:    297.55 [#/sec] (mean)
Time per request:       336.080 [ms] (mean)
Time per request:       3.361 [ms] (mean, across all concurrent requests)
Transfer rate:          202.64 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.5      0     109
Processing:     8  334 403.9    176    3556
Waiting:        7  334 403.9    176    3556
Total:          9  335 403.8    177    3556

Percentage of the requests served within a certain time (ms)
  50%    177
  66%    296
  75%    415
  80%    519
  90%    842
  95%   1141
  98%   1615
  99%   1966
 100%   3556 (longest request)

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

شكرا اليك

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

المحلول

هل تتوقع 100 طلب متزامن؟هل تتوقع تلقي 10 آلاف طلب خلال 30 ثانية؟

من الرائع أن تتمكن من تشغيل هذا المعيار، لكن اسأل نفسك عما يعنيه ذلك.فكر في المقدار الحقيقي لحركة المرور التي ستتلقاها.أنت حقًا بحاجة إلى سؤال لقياسه:

  • أتوقع أن يضم موقعي 3000 مستخدم.
  • أتوقع أنه أثناء ذروة الاستخدام، سيتم وصول 500 منهم إلى الصفحة
  • الاستخدام عادةً هو 3 طلبات خلال دقيقة واحدة: 3 * 500 / 60 = ~ 25 req/sec
  • هل يمكن لموقعي التعامل مع 25 طلبًا في الثانية ويكون سريع الاستجابة (أقل من 200 مللي ثانية لكل طلب)؟

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

إذا كنت تحاول فقط إنشاء ملف تعريف للبرنامج النصي الخاص بك، فاستخدم com.xdebug للعثور على المكان الذي يقضي فيه الكود الخاص بك وقته.

نصائح أخرى

أعتقد أن هذا يبدو وكأنه عمل عظيم.بعيد جدا؟أود أن أقول أنها أعلى بكثير من القاعدة.

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

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

هل يمكنك ضبط عدد المستخدمين المتزامنين في البرنامج المعياري؟هل يرسل هذا الاختبار 1000 طلب واحدًا تلو الآخر؟قد يكون وجود عدة مستخدمين يقرعون على الخادم في نفس الوقت أمرًا أكثر واقعية.

هل يمكنك جعل الفاصل الزمني للإرسال عشوائيًا؟قد يكون هذا تمثيلًا أفضل لوضعك الحقيقي.

هل يمكنك تغيير البيانات التي يستخدمها البرنامج النصي؟هل يمثل الظروف التي سيتم استخدامها بشكل جيد في ظلها؟

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

من المفترض ألا تتلقى أي طلبات فاشلة - تحتاج إلى التحقق من سجل الأخطاء الخاص بك لمعرفة سبب فشلها.

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

جرب استخدام com.xdebug لملف التعريف الخاص بك التعليمات البرمجية.com.xdebug سيوفر لك أيضًا أخطاء أفضل على الشاشة وتتبعات المكدس.

ثم استخدام webgrind لعرض الملف الشخصي بتنسيق جميل.

يعد ~200 مللي ثانية لكل طلب رقمًا شائعًا إلى حد ما حيث تبدو الصفحة "سريعة" بالنسبة لغالبية المستخدمين.

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