Γνωρίζετε τον μέσο χρόνο απόκρισης του ιστότοπού σας; Γνωρίζετε πόσους ταυτόχρονους χρήστες μπορεί να χειριστεί ο ιστότοπός σας;
Η δοκιμή φόρτωσης είναι απαραίτητη για τις εφαρμογές Ιστού για να γνωρίζουν τη χωρητικότητα του ιστότοπου. Εάν πρόκειται να επιλέξετε τον διακομιστή ιστού, τότε ένα από τα πρώτα πράγματα που θέλετε να κάνετε είναι να εκτελέσετε τη δοκιμή φόρτωσης και να δείτε ποιος λειτουργεί καλά για εσάς.
Η συγκριτική αξιολόγηση μπορεί να σας βοηθήσει να αποφασίσετε.
- Ποιος διακομιστής ιστού λειτουργεί καλύτερα
- Αριθμός διακομιστών που χρειάζεστε για να εξυπηρετήσετε x αριθμός αιτημάτων
- Ποια διαμόρφωση σας δίνει τα καλύτερα αποτελέσματα
- Ποιες στοίβες τεχνολογίας έχουν καλύτερη απόδοση
- Πότε ο ιστότοπός σας θα αποδώσει πιο αργά ή θα παρουσιάσει βλάβη
Υπάρχουν πολλά διαδικτυακά εργαλεία για να πραγματοποιήσετε μια δοκιμασία ακραίων καταστάσεων. Ωστόσο, εάν αναζητάτε μια εσωτερική λύση ή θέλετε να κάνετε συγκριτική αξιολόγηση μόνο της απόδοσης του διακομιστή ιστού, τότε μπορείτε να χρησιμοποιήσετε το ApacheBench και εναλλακτικά μερικά από τα παρακάτω εργαλεία.
Έχω χρησιμοποιήσει διακομιστή ιστού Apache & Nginx που φιλοξενείται σε DigitalOcean να το δοκιμάσω.
Πίνακας περιεχομένων
ApacheBench
ApacheBench Το (ab) είναι ένα πρόγραμμα γραμμής εντολών ανοιχτού κώδικα που λειτουργεί με οποιονδήποτε διακομιστή ιστού. Σε αυτήν την ανάρτηση, θα εξηγήσω πώς να εγκαταστήσετε αυτό το μικρό πρόγραμμα και να εκτελέσετε τη δοκιμή φόρτωσης για τη συγκριτική αξιολόγηση των αποτελεσμάτων.
Απάχης
Ας εγκαταστήσουμε το ApacheBench χρησιμοποιώντας μια εντολή yum.
yum install httpd-tools
Εάν έχετε ήδη httpd-tools, τότε μπορείτε να το αγνοήσετε.
Τώρα, ας δούμε πώς αποδίδει για 5000 αιτήματα με ταυτόχρονο 500.
[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> 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 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software: Apache/2.2.15 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 4961 bytes Concurrency Level: 500 Time taken for tests: 13.389 seconds Complete requests: 5000 Failed requests: 0 Write errors: 0 Non-2xx responses: 5058 Total transferred: 26094222 bytes HTML transferred: 25092738 bytes Requests per second: 373.45 [#/sec] (mean) Time per request: 1338.866 [ms] (mean) Time per request: 2.678 [ms] (mean, across all concurrent requests) Transfer rate: 1903.30 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 42 20.8 41 1000 Processing: 0 428 2116.5 65 13310 Waiting: 0 416 2117.7 55 13303 Total: 51 470 2121.0 102 13378 Percentage of the requests served within a certain time (ms) 50% 102 66% 117 75% 130 80% 132 90% 149 95% 255 98% 13377 99% 13378 100% 13378 (longest request) [[email protected] ~]#
Έτσι, όπως μπορείτε να δείτε, ο Apache έχει χειριστεί 373 αιτήματα ανά δευτερόλεπτο και χρειάστηκαν συνολικά 13.389 δευτερόλεπτα για να εξυπηρετήσει τα συνολικά αιτήματα.
Τώρα ξέρετε ότι η προεπιλεγμένη διαμόρφωση μπορεί να εξυπηρετήσει αυτά τα πολλά αιτήματα, οπότε όταν κάνετε οποιεσδήποτε αλλαγές διαμόρφωσης μπορείτε να κάνετε ξανά τη δοκιμή για να συγκρίνετε τα αποτελέσματα και να επιλέξετε το καλύτερο.
Nginx
Ας κάνουμε τη δοκιμή τι κάναμε για το Apache, ώστε να μπορείτε να συγκρίνετε ποιο αποδίδει καλύτερα.
[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> 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 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software: nginx/1.10.1 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 3698 bytes Concurrency Level: 500 Time taken for tests: 0.758 seconds Complete requests: 5000 Failed requests: 0 Write errors: 0 Total transferred: 19660000 bytes HTML transferred: 18490000 bytes Requests per second: 6593.48 [#/sec] (mean) Time per request: 75.832 [ms] (mean) Time per request: 0.152 [ms] (mean, across all concurrent requests) Transfer rate: 25317.93 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 6 11.0 2 53 Processing: 5 19 8.2 17 53 Waiting: 0 18 8.2 16 47 Total: 10 25 17.4 18 79 Percentage of the requests served within a certain time (ms) 50% 18 66% 21 75% 21 80% 22 90% 69 95% 73 98% 75 99% 76 00% 79 (longest request) [[email protected] ~]#
ΟΥΑΟΥ!
Το είδες αυτό?
Το Nginx χειρίστηκε 6593 αιτήματα ανά δευτερόλεπτο! Ένας νικητής.
Βλέπετε λοιπόν, συγκρίνοντας μόνο με δύο διακομιστές Ιστού, θα έχετε μια ιδέα ποιον να επιλέξετε για την εφαρμογή Ιστού σας.
Η παραπάνω δοκιμή είναι σε CentOS 6.8, 64 bit. Μπορείτε να δοκιμάσετε πολλούς συνδυασμούς έκδοσης OS & Web Server για βέλτιστα αποτελέσματα.
Δεν σας αρέσει το ApacheBench για οποιονδήποτε λόγο; Μην ανησυχείτε, υπάρχουν πολλά άλλα που μπορείτε να χρησιμοποιήσετε για να εκτελέσετε φόρτωση HTTP.
ΠΟΛΙΟΡΚΙΑ
ΠΟΛΙΟΡΚΙΑ είναι ένα βοηθητικό πρόγραμμα δοκιμής φόρτωσης HTTP που υποστηρίζεται σε UNIX. Μπορείτε να βάλετε πολλαπλές διευθύνσεις URL σε ένα αρχείο κειμένου για τη φόρτωση δοκιμών. Μπορείτε να εγκαταστήσετε το siege χρησιμοποιώντας το yum.
# yum install siege
Ας εκτελέσουμε τη δοκιμή με 500 ταυτόχρονες αιτήσεις για 5 δευτερόλεπτα.
[[email protected] ~]# siege -q -t 5S -c 500 http://localhost/ Lifting the server siege... done. Transactions: 4323 hits Availability: 100.00 % Elapsed time: 4.60 secs Data transferred: 15.25 MB Response time: 0.04 secs Transaction rate: 939.78 trans/sec Throughput: 3.31 MB/sec Concurrency: 37.97 Successful transactions: 4323 Failed transactions: 0 Longest transaction: 1.04 Shortest transaction: 0.00 [[email protected] ~]#
Να αναλύσουμε τις παραμέτρους.
-q – για να το εκτελείτε αθόρυβα (χωρίς εμφάνιση λεπτομερειών αιτήματος)
-t – τρέξτε για 5 δευτερόλεπτα
-γ – 500 ταυτόχρονες αιτήσεις
Έτσι όπως μπορείτε να δείτε, η διαθεσιμότητα είναι 100% και ο χρόνος απόκρισης είναι 0,04 δευτερόλεπτα. Μπορείτε να τροποποιήσετε την παράμετρο δοκιμής φορτίου με βάση τον στόχο σας.
Αλί
Αλί είναι ένα σχετικά νέο εργαλείο δοκιμής φορτίου για την εκτέλεση ανάλυσης σε πραγματικό χρόνο. Υποστηρίζει πολλαπλές πλατφόρμες για εγκατάσταση, συμπεριλαμβανομένου του Docker.
Μόλις εγκατασταθεί, εκτελέστε το ali για να δείτε τις λεπτομέρειες χρήσης.
[email protected]:~# ali no target given Usage: ali [flags] <target URL> Flags: -b, --body string A request body to be sent. -B, --body-file string The path to file whose content will be set as the http request body. --debug Run in debug mode. -d, --duration duration The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s) -H, --header strings A request header to be sent. Can be used multiple times to send multiple headers. -k, --keepalive Use persistent connections. (default true) -M, --max-body int Max bytes to capture from response bodies. Give -1 for no limit. (default -1) -m, --method string An HTTP request method for each request. (default "GET") -r, --rate int The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50) -t, --timeout duration The timeout for each request. 0s means to disable timeouts. (default 30s) -v, --version Print the current version. Examples: ali --duration=10m --rate=100 http://host.xz Author: Ryo Nakao <[email protected]> [email protected]:~#
Όπως μπορείτε να δείτε παραπάνω, έχετε την επιλογή να στείλετε κεφαλίδες HTTP, διάρκεια δοκιμής, όριο ρυθμού, χρονικό όριο και πολλά άλλα. Έκανα μια γρήγορη δοκιμή στο grtechpc.org Tools και εδώ φαίνεται η έξοδος.
Η αναφορά είναι διαδραστική και παρέχει λεπτομερείς πληροφορίες για τον λανθάνοντα χρόνο.
Γκόμπενς
Γκόμπενς είναι γραμμένο σε γλώσσα Go και ένα απλό βοηθητικό πρόγραμμα δοκιμής φόρτωσης για συγκριτική αξιολόγηση της απόδοσης του διακομιστή web. Υποστηρίζει περισσότερους από 20.000 ταυτόχρονους χρήστες, κάτι που δεν υποστηρίζει το ApacheBench.
Apache JMeter
JMeter είναι ένα από τα πιο δημοφιλή εργαλεία ανοιχτού κώδικα για τη μέτρηση της απόδοσης των εφαρμογών Ιστού. Το JMeter είναι μια εφαρμογή βασισμένη σε java και όχι μόνο διακομιστής ιστού, αλλά μπορείτε να το χρησιμοποιήσετε ενάντια σε PHP, Java. ASP.net, SOAP, REST κ.λπ.
Το JMeter απέκτησε αξιοπρεπές φιλικό GUI και η πιο πρόσφατη έκδοση 3.0 απαιτεί Java 7 ή νεότερη έκδοση για την εκκίνηση της εφαρμογής. Πρέπει να δοκιμάσετε το JMeter εάν ο στόχος σας είναι να βελτιστοποιήσετε την απόδοση της διαδικτυακής εφαρμογής.
wrk
wrk είναι ένα άλλο σύγχρονο εργαλείο μέτρησης απόδοσης για να φορτώσετε τον διακομιστή ιστού σας και να σας δώσει λεπτομέρειες καθυστέρησης, αιτήματος ανά δευτερόλεπτο, μεταφοράς ανά δευτερόλεπτο κ.λπ.
Με το wrk, μπορείτε να καθορίσετε να εκτελέσετε μια δοκιμή φόρτωσης με έναν αριθμό νημάτων.
Ας πάρουμε ένα παράδειγμα εκτέλεσης μιας δοκιμής για 5 λεπτά με 500 ταυτόχρονους χρήστες με 8 νήματα.
wrk –t8 –c500 -d300s http://localhost
Autocannon
Εμπνευσμένο από τη δουλειά, αυτοκανόνι είναι γραμμένο στο Node.js. Μπορείτε να το χρησιμοποιήσετε μέσω προγραμματισμού, μέσω API ή αυτόνομου βοηθητικού προγράμματος. Το μόνο που χρειάζεστε είναι να εγκαταστήσετε το NodeJS ως προαπαιτούμενο.
Μπορείτε να ελέγξετε έναν αριθμό συνδέσεων, αιτημάτων, διάρκειας, εργαζομένων, χρονικού ορίου λήξης, ποσοστού σύνδεσης και να προσφέρετε πολλές επιλογές για τη συγκριτική αξιολόγηση των εφαρμογών ιστού σας.
Curl-loader
φορτωτής μπούκλας είναι γραμμένο σε C για προσομοίωση φόρτωσης εφαρμογής και υποστηρίζει SSL/TLS. Μαζί με τη δοκιμή ιστοσελίδας, μπορείτε επίσης να χρησιμοποιήσετε αυτό το εργαλείο ανοιχτού κώδικα για να εκτελέσετε φόρτωση σε διακομιστές FTP.
Μπορείτε να δημιουργήσετε ένα δοκιμαστικό σχέδιο με συνδυασμό HTTP, HTTPS, FTP και FTPS σε μια διαμόρφωση μεμονωμένης παρτίδας.
httperf
ο httperf είναι ένα εργαλείο υψηλής απόδοσης που εστιάζει σε δείκτες αξιολόγησης μικρο- και μακρο-επιπέδου. Υποστηρίζει πρωτόκολλα HTTP/1.1 και SSL.
Εάν έχετε τον αναμενόμενο αριθμό ταυτόχρονων χρηστών και θέλετε να ελέγξετε εάν ο διακομιστής ιστού σας μπορεί να εξυπηρετήσει έναν αριθμό αιτημάτων, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Η παραπάνω εντολή θα ελεγχθεί με 100 αιτήματα ανά δευτερόλεπτο για 1000 αιτήματα HTTP.
Τσουνγκ
Τσουνγκ είναι ένα πολυπρωτόκολλο κατανεμημένο εργαλείο δοκιμών ακραίων καταστάσεων για να τονίσει τον διακομιστή HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Υποστηρίζει HTTP/1.0, HTTP/1.1 και ο χειρισμός των cookies γίνεται αυτόματα.
Η δημιουργία αναφοράς είναι εφικτή με το Tsung.
συμπέρασμα
Ελπίζω τα παραπάνω εργαλεία συγκριτικής αξιολόγησης να σας δώσουν μια ιδέα για την απόδοση του διακομιστή ιστού σας και να αποφασίσετε τι λειτουργεί καλύτερα για το έργο σας.
Στη συνέχεια, μην ξεχνάτε να παρακολουθείτε την απόδοση του ιστότοπού σας.