PDA

View Full Version : ابزار تست کدها از نظر سرعت اجرا و بهینه بودن و ....



captain_hamid
چهارشنبه 19 آذر 1393, 08:59 صبح
سلام
ابزاری مناسب برای اینکه به طور دقیق اطلاعات زمان اجرا و چقدر حافظه مصرف میکنه این کد و اطلاعاتی از این قبیل رو بده.
ابزاری که کدهایی که خودمون نوشتیم تست بگیریم. یا نکاتی که تو بهینگی باید استفاده کرد.
اگه این ابزارها رو معرفی کنید ممنون.

MMSHFE
چهارشنبه 19 آذر 1393, 10:14 صبح
دو مورد از گزینه های خوب ab (مخفف Apache Benchmark) و Siege هست که اولی همراه خود Apache هست (توی پوشه bin) و دومی رو باید خودتون نصب کنید (روی ویندوز نمیشه).

hamid-nic
چهارشنبه 19 آذر 1393, 10:24 صبح
سلام
برای siege اگر از ویندوز استفاده می کنید ابتدا باید Cygwin را دانلود و نصب کنید و پس از آن اقدام به نصب siege کنید .

beh3000
چهارشنبه 19 آذر 1393, 13:05 عصر
با ab چطوری باید کار کرد ؟ اصلا متوجه نشدم ! میاد و میره !

من wamp نصب شده دارم و توی پوشه C:\wamp\bin\apache\apache2.4.9\bin یک فایل به اسم ab.exe وجود داره همون رو میگید دیگه ؟!

MMSHFE
چهارشنبه 19 آذر 1393, 13:15 عصر
باید توی Command Line باهاش کار کنید. مثل یک مرورگر کار میکنه. برای مثال، Command Prompt رو باز کنید و به ترتیب دستورات زیر رو اجرا کنید:

C:
cd \wamp\bin\apache\apache2.4.9\bin
ab -c 100 -t 100 http://localhost/path/to/your/script.php
دستور فوق باعث میشه اسکریپت شما به مدت 100 ثانیه همزمان توسط 100 درخواست مورد بررسی قرار بگیره. برای مشاهده توضیحات کاملش دستور ab رو بدون پارامتر اجرا کنید.
این هم نمونه خروجی:

C:\xampp\apache\bin>ab -c 100 -t 100 http://localhost/info.php
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
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 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


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

Document Path: /info.php
Document Length: 97382 bytes

Concurrency Level: 100
Time taken for tests: 71.095 seconds
Complete requests: 50000
Failed requests: 5144
(Connect: 0, Receive: 0, Length: 5144, Exceptions: 0)
Total transferred: 4877494196 bytes
HTML transferred: 4869094196 bytes
Requests per second: 703.28 [#/sec] (mean)
Time per request: 142.190 [ms] (mean)
Time per request: 1.422 [ms] (mean, across all concurrent requests)
Transfer rate: 66997.31 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.0 1 14
Processing: 54 141 25.3 142 364
Waiting: 7 114 38.0 128 253
Total: 54 142 25.3 142 365

Percentage of the requests served within a certain time (ms)
50% 142
66% 149
75% 154
80% 157
90% 166
95% 178
98% 205
99% 225
100% 365 (longest request)
اگه هر جایی از خروجی رو متوجه نشدین بفرمایید تا توضیح بدم.

beh3000
چهارشنبه 19 آذر 1393, 13:25 عصر
فکر میکنم مهمترین بخشش اون قسمت درصدهای پائین صفحه باشه اونا رو میشه توضیح بدین ؟

beh3000
چهارشنبه 19 آذر 1393, 13:38 عصر
پروژه ام با Yii هست یکی از مسیرهای صفحات رو بهش دادم مثل http://localhost/online/user/list ولی قسمت document length رو صفر بایت میزنه ... و html transferred رو هم صفر میزنه ... چون احتمالا اون مسیری که دادم مسیر خود فایلی نیست که اجرا میشه اینجوری خروجی میده ... نمیدونم بقیه اطلاعاتی که میده درسته یا نه ... اینجا باید چیکار کرد ؟

MMSHFE
چهارشنبه 19 آذر 1393, 13:44 عصر
دقت کنید که باید مثل آدرسی که تو مرورگر میزنید وارد کنید نه اینکه مسیر فیزیکی فایل رو بدین. اگه صفر میزنه یه جای کار اشکال داره. شاید بخاطر خطا صفحه باز نمیشه. تو مرورگر چک کنید خروجی دارین؟

MMSHFE
چهارشنبه 19 آذر 1393, 13:47 عصر
فکر میکنم مهمترین بخشش اون قسمت درصدهای پائین صفحه باشه اونا رو میشه توضیح بدین ؟

اون درصدها میگه که چند درصد از درخواستها در مدت زمان مشخصی از اجرای تست جواب گرفتن. برای مثال توی خروجی که گذاشتم داره میگه 50 درصد از درخواستها توی 142 میلی ثانیه اول جواب گرفتن. تا 149 میلی ثانیه این رقم به 60 درصد رسید (10 درصد دیگه هم جواب گرفتن) و الی آخر.

beh3000
چهارشنبه 19 آذر 1393, 13:49 عصر
آها ... سشن رو باید چیکار کرد ؟؟؟ اون صفحه ای که زدم سشن میخواد باید سشن رو بطور موقت بردارم ؟؟

MMSHFE
چهارشنبه 19 آذر 1393, 13:51 عصر
بله باید بردارین.

beh3000
چهارشنبه 19 آذر 1393, 13:53 عصر
استاد درست شد مرسی ... اون قسمتی که اگه سشن نبود ریدایرکت میشد رو غیر فعال کردم حل شد مرسی

MMSHFE
چهارشنبه 19 آذر 1393, 13:58 عصر
خواهش میکنم. البته دکمه تشکر کاربرد قشنگتری نسبت به ارسال پست داره :چشمک:

beh3000
چهارشنبه 19 آذر 1393, 14:10 عصر
دکمه تشکر کاربرد قشنگتری نسبت به ارسال پست داره

همیشه رعایت میکردم ایندفه از دستم دررفت ... تشکراتتون ماشاا... زیاده شما

بین اطلاعاتی که میده مقدار مصرف رم رو نداره ... اینکه این اسکریپت با یکبار چندبار اجرا چقدر مصرف رم داره ... نمیدونم چرا روی مصرف رم حساس شدم انقد ... با فریم ورک هم که مینویسی لامصب مصرفش خیلی بالاست

MMSHFE
چهارشنبه 19 آذر 1393, 14:20 عصر
بخاطر تعداد تشکر نمیگم. بخاطر نظم و قوانین تالار گفتم. درمورد مصرف حافظه هم ابزار خاصی لازم نیست. کافیه شما اول و آخر اسکریپت با دستور memory_get_usage حافظه ای که در اختیار PHP گذاشته شده رو بدست بیارین و از هم کم کنید تا مصرف حافظه اسکریپت شما بدست بیاد.

DR.HTML
چهارشنبه 19 آذر 1393, 19:43 عصر
همیشه لینوکسیا فراموش میشن نمیدونم چرا ؟!

خوب اگر ab رو نصب ندارین باید نصبش کنید با این دستور

apt-get install apache2-utils

بعد که نصب شد دستورات همونه

ab -kc 10 -t 30 http://localhost/

engmmrj
چهارشنبه 19 آذر 1393, 20:48 عصر
باید توی Command Line باهاش کار کنید. مثل یک مرورگر کار میکنه. برای مثال، Command Prompt رو باز کنید و به ترتیب دستورات زیر رو اجرا کنید:

C:
cd \wamp\bin\apache\apache2.4.9\bin
ab -c 100 -t 100 http://localhost/path/to/your/script.php
دستور فوق باعث میشه اسکریپت شما به مدت 100 ثانیه همزمان توسط 100 درخواست مورد بررسی قرار بگیره. برای مشاهده توضیحات کاملش دستور ab رو بدون پارامتر اجرا کنید.
این هم نمونه خروجی:

اگه هر جایی از خروجی رو متوجه نشدین بفرمایید تا توضیح بدم.
میشه توضیح بدین

MMSHFE
چهارشنبه 19 آذر 1393, 21:05 عصر
همیشه لینوکسیا فراموش میشن نمیدونم چرا ؟!

خوب اگر ab رو نصب ندارین باید نصبش کنید با این دستور

apt-get install apache2-utils

بعد که نصب شد دستورات همونه

ab -kc 10 -t 30 http://localhost/

لینوکس کارا خودشون راهو پیدا میکنن :چشمک:

MMSHFE
پنج شنبه 20 آذر 1393, 09:45 صبح
میشه توضیح بدین


C:\xampp\apache\bin>ab -c 100 -t 100 http://localhost/info.php
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
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 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


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

Document Path: /info.php
Document Length: 97382 bytes

Concurrency Level: 100
Time taken for tests: 71.095 seconds
Complete requests: 50000
Failed requests: 5144
(Connect: 0, Receive: 0, Length: 5144, Exceptions: 0)
Total transferred: 4877494196 bytes
HTML transferred: 4869094196 bytes
Requests per second: 703.28 [#/sec] (mean)
Time per request: 142.190 [ms] (mean)
Time per request: 1.422 [ms] (mean, across all concurrent requests)
Transfer rate: 66997.31 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.0 1 14
Processing: 54 141 25.3 142 364
Waiting: 7 114 38.0 128 253
Total: 54 142 25.3 142 365

Percentage of the requests served within a certain time (ms)
50% 142
66% 149
75% 154
80% 157
90% 166
95% 178
98% 205
99% 225
100% 365 (longest request)
به ترتیب توضیح میدم (خطوطی که مهم نیست (توضیح یا خط خالی) نادیده میگیرم:

1- اجرای بنچمارک

20- نسخه Apache

21- نام هاست

22- شماره پورت مورد استفاده

24- مسیر اسکریپت روی هاست (نسبت به Webroot)

25- طول خروجی اسکریپت (برحسب بایت)

27- سطح همپوشانی (چند درصد درخواستها بطور همزمان اجرا شدن) - برای مثال اگه اسکریپت شما یک فایل رو قفل کنه و تا پایان کارش آزاد نکنه، بقیه درخواستها باید منتظر بمونن تا درخواست قبلی کارش تمام بشه و درنتیجه درصد همپوشانی به صفر میرسه!

28- زمان اجرای تست برحسب ثانیه (دقت کنید که درسته که ما گفتیم 100 ثانیه ولی بطور پیشفرض ab حداکثر 50 هزار تست اجرا میکنه مگه اینکه با پارامتر مربوطه طبق توضیحاتش تعداد رو تغییر بدیم)

29- تعداد کل درخواستها (موفق یا ناموفق)

30- تعداد درخواستهای ناموفق

31- جزئیات خطاها (چند درخواست توی ورود به وب سرور به مشکل برخوردن - مثلاً وب سرور سرش شلوغ بوده جواب نداده کلاً، چند درخواست بعد از دریافت، با خطا مواجه شدن - مثلاً فایلی در درسترس نبوده، چند درخواست در طول پردازش به مشکل برخوردن، و درنهایت چند درخواست موقع اجرا به Exception برخورد کردن)

32- کل حجم انتقال داده شده برحسب بایت (شامل هدرهای درخواست و پاسخ

33- کل حجم HTML انتقال داده شده برحسب بایت

34- تعداد درخواست در ثانیه (میانگین)

35- مدت زمان اجرای هر درخواست برحسب میلی ثانیه (میانگین)

36- مدت زمان اجرای هر درخواست مستقل برحسب میلی ثانیه (میانگین) - این عدد با تقسیم عدد قبلی بر درصد همپوشانی بدست میاد. برای مثال اگه بطور متوسط هر درخواست 250 میلی ثانیه طول بکشه و درصد همپوشانی 50 باشه، بطور متوسط هر درخواست مستقل 5 میلی ثانیه زمان برده که باعث شده جمع زمان اجرای درخواستهای همزمان توی اون مدت، 250 میلی ثانیه بشه. به بیان دیگه، CPU توی 250 میلی ثانیه یک درخواست رو تمام کرده ولی چون همزمان داشته به 50 درخواست جواب میداده، عملاً هر درخواست 5 میلی ثانیه زمان نیاز داشته (اگه همزمان وارد نمیشدن CPU توی 5 میلی ثانیه پردازش اسکریپت رو تمام میکرد).

37- نرخ انتقال (تولید خروجی) برحسب کیلوبایت بر ثانیه - دقت کنید که اینکه نوشته received یعنی اطلاعاتی که Apache از PHP دریافت کرده که میشه همون خروجی اسکریپت PHP شما

41- زمان اتصال (از لحظه دریافت درخواست توسط وب سرور تا زمان بازشدن اسکریپت توسط مفسر PHP) - به ترتیب حداقل، میانه (عدد وسط +/- انحراف معیار استاندارد)، میانگین و حداکثر (برحسب میلی ثانیه)

42- زمان پردازش (از لحظه بازشدن اسکریپت توسط مفسر PHP تا زمانی که اعلام کرده کارش با اسکریپت تمامه و خروجی رو تحویل Apache داده) - به ترتیب حداقل، میانه (عدد وسط +/- انحراف معیار استاندارد)، میانگین و حداکثر (برحسب میلی ثانیه)

43- زمان انتظار (از لحظه دریافت درخواست توسط سیستم سرور تا زمان دریافت درخواست توسط وب سرور) - به ترتیب حداقل، میانه (عدد وسط +/- انحراف معیار استاندارد)، میانگین و حداکثر (برحسب میلی ثانیه) - دقت کنید که این مورد با مورد 41 فرق میکنه. توی این مورد داره میگه که Apache چقدر زمان برده که درخواست رو دریافت کنه چون ممکنه درخواست توسط پروتکل HTTP(S) به سرور رسیده باشه ولی Apache هنوز وقت نکرده جواب بده. درواقع اختلاف مورد 41 و 43 نشون دهنده مدت زمانی هست که درخواست به کامپیوتر سرور رسیده ولی به خود نرم افزار وب سرور نرسیده

44- زمان کل (از لحظه دریافت درخواست در کامپیوتر سرور تا زمان تولید خروجی توسط PHP و ارسال نتیجه به کلاینت) - به ترتیب حداقل، میانه (عدد وسط +/- انحراف معیار استاندارد)، میانگین و حداکثر (برحسب میلی ثانیه)

درصدهای آخر رو هم که قبلاً توضیح دادم.

captain_hamid
پنج شنبه 20 آذر 1393, 10:26 صبح
میشه تو این تست یک سند php که توش فرم هست و متد ارسالش هم پست هست رو تست کرد.
یا مثلا من یک فایل json دارم که داخل اون فیلتر های لازم برای query زدن هست. اینا رو میشه با همراه با درخواستی که تو ab مینویسیم پیوست کنیم؟
یا به طور کلی و ساده تر بخوام بگم یک سند php می خوام تست بگیرم که اون سند رو تکی نمیشه تست گرفت. آدرس مستقیم نمیشه داد. نمیدونم منظورم رو تونستم برسونم؟

تشکر

MMSHFE
پنج شنبه 20 آذر 1393, 10:52 صبح
با سوئیچ p- میتونید کار کنید. این لینک رو ببینید:
http://httpd.apache.org/docs/2.4/programs/ab.html

engmmrj
پنج شنبه 20 آذر 1393, 12:20 عصر
C:\xampp\apache\bin>ab -c 100 -t 100 http://localhost/info.php
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
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 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


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

Document Path: /info.php
Document Length: 97382 bytes

Concurrency Level: 100
Time taken for tests: 71.095 seconds
Complete requests: 50000
Failed requests: 5144
(Connect: 0, Receive: 0, Length: 5144, Exceptions: 0)
Total transferred: 4877494196 bytes
HTML transferred: 4869094196 bytes
Requests per second: 703.28 [#/sec] (mean)
Time per request: 142.190 [ms] (mean)
Time per request: 1.422 [ms] (mean, across all concurrent requests)
Transfer rate: 66997.31 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.0 1 14
Processing: 54 141 25.3 142 364
Waiting: 7 114 38.0 128 253
Total: 54 142 25.3 142 365

Percentage of the requests served within a certain time (ms)
50% 142
66% 149
75% 154
80% 157
90% 166
95% 178
98% 205
99% 225
100% 365 (longest request)
به ترتیب توضیح میدم (خطوطی که مهم نیست (توضیح یا خط خالی) نادیده میگیرم:

1- اجرای بنچمارک

20- نسخه Apache

21- نام هاست

22- شماره پورت مورد استفاده

24- مسیر اسکریپت روی هاست (نسبت به Webroot)

25- طول خروجی اسکریپت (برحسب بایت)

27- سطح همپوشانی (چند درصد درخواستها بطور همزمان اجرا شدن) - برای مثال اگه اسکریپت شما یک فایل رو قفل کنه و تا پایان کارش آزاد نکنه، بقیه درخواستها باید منتظر بمونن تا درخواست قبلی کارش تمام بشه و درنتیجه درصد همپوشانی به صفر میرسه!

28- زمان اجرای تست برحسب ثانیه (دقت کنید که درسته که ما گفتیم 100 ثانیه ولی بطور پیشفرض ab حداکثر 50 هزار تست اجرا میکنه مگه اینکه با پارامتر مربوطه طبق توضیحاتش تعداد رو تغییر بدیم)

29- تعداد کل درخواستها (موفق یا ناموفق)

30- تعداد درخواستهای ناموفق

31- جزئیات خطاها (چند درخواست توی ورود به وب سرور به مشکل برخوردن - مثلاً وب سرور سرش شلوغ بوده جواب نداده کلاً، چند درخواست بعد از دریافت، با خطا مواجه شدن - مثلاً فایلی در درسترس نبوده، چند درخواست در طول پردازش به مشکل برخوردن، و درنهایت چند درخواست موقع اجرا به Exception برخورد کردن)

32- کل حجم انتقال داده شده برحسب بایت (شامل هدرهای درخواست و پاسخ

33- کل حجم HTML انتقال داده شده برحسب بایت

34- تعداد درخواست در ثانیه (میانگین)

35- مدت زمان اجرای هر درخواست برحسب میلی ثانیه (میانگین)

36- مدت زمان اجرای هر درخواست مستقل برحسب میلی ثانیه (میانگین) - این عدد با تقسیم عدد قبلی بر درصد همپوشانی بدست میاد. برای مثال اگه بطور متوسط هر درخواست 250 میلی ثانیه طول بکشه و درصد همپوشانی 50 باشه، بطور متوسط هر درخواست مستقل 5 میلی ثانیه زمان برده که باعث شده جمع زمان اجرای درخواستهای همزمان توی اون مدت، 250 میلی ثانیه بشه. به بیان دیگه، CPU توی 250 میلی ثانیه یک درخواست رو تمام کرده ولی چون همزمان داشته به 50 درخواست جواب میداده، عملاً هر درخواست 5 میلی ثانیه زمان نیاز داشته (اگه همزمان وارد نمیشدن CPU توی 5 میلی ثانیه پردازش اسکریپت رو تمام میکرد).

37- نرخ انتقال (تولید خروجی) برحسب کیلوبایت بر ثانیه - دقت کنید که اینکه نوشته received یعنی اطلاعاتی که Apache از PHP دریافت کرده که میشه همون خروجی اسکریپت PHP شما

41- زمان اتصال (از لحظه دریافت درخواست توسط وب سرور تا زمان بازشدن اسکریپت توسط مفسر PHP) - به ترتیب حداقل، میانه (عدد وسط +/- انحراف معیار استاندارد)، میانگین و حداکثر (برحسب میلی ثانیه)

42- زمان پردازش (از لحظه بازشدن اسکریپت توسط مفسر PHP تا زمانی که اعلام کرده کارش با اسکریپت تمامه و خروجی رو تحویل Apache داده) - به ترتیب حداقل، میانه (عدد وسط +/- انحراف معیار استاندارد)، میانگین و حداکثر (برحسب میلی ثانیه)

43- زمان انتظار (از لحظه دریافت درخواست توسط سیستم سرور تا زمان دریافت درخواست توسط وب سرور) - به ترتیب حداقل، میانه (عدد وسط +/- انحراف معیار استاندارد)، میانگین و حداکثر (برحسب میلی ثانیه) - دقت کنید که این مورد با مورد 41 فرق میکنه. توی این مورد داره میگه که Apache چقدر زمان برده که درخواست رو دریافت کنه چون ممکنه درخواست توسط پروتکل HTTP(S) به سرور رسیده باشه ولی Apache هنوز وقت نکرده جواب بده. درواقع اختلاف مورد 41 و 43 نشون دهنده مدت زمانی هست که درخواست به کامپیوتر سرور رسیده ولی به خود نرم افزار وب سرور نرسیده

44- زمان کل (از لحظه دریافت درخواست در کامپیوتر سرور تا زمان تولید خروجی توسط PHP و ارسال نتیجه به کلاینت) - به ترتیب حداقل، میانه (عدد وسط +/- انحراف معیار استاندارد)، میانگین و حداکثر (برحسب میلی ثانیه)

درصدهای آخر رو هم که قبلاً توضیح دادم.
از روی این آمار ها چطوری میشه جمع بندی کرد و نتیجه ایی گرفت ؟