pengujian beban ab

194

Bisakah seseorang memandu saya melalui proses bagaimana saya dapat memuat menguji situs web saya menggunakan alat bangku apache ( ab)?

Saya ingin tahu yang berikut:

Berapa banyak orang per menit yang dapat ditangani oleh situs?

Tolong tunjukkan saya perintah yang harus saya jalankan untuk mencari tahu.

Saya mencoba setiap tutorial, dan mereka membingungkan.

perhiasan permata
sumber

Jawaban:

314

Alat tolok ukur apache sangat mendasar, dan meskipun itu akan memberi Anda ide yang solid tentang beberapa kinerja, itu adalah ide yang buruk untuk hanya bergantung pada itu jika Anda berencana untuk membuat situs Anda terkena tekanan serius dalam produksi.

Karena itu, inilah parameter yang paling umum dan paling sederhana:

-c: ("Concurrency"). Menunjukkan berapa banyak klien (orang / pengguna) yang akan mengenai situs pada saat yang bersamaan. Saat abberjalan, akan ada -cklien yang memukul situs. Inilah yang sebenarnya menentukan jumlah stres yang akan diderita situs Anda selama benchmark.

-n: Menunjukkan berapa banyak permintaan yang akan dibuat. Ini hanya menentukan panjang patokan. Nilai tinggi -ndengan -cnilai yang dapat didukung server Anda adalah ide yang baik untuk memastikan bahwa tidak ada hal-hal yang dapat merusak stres berkelanjutan: tidak sama untuk mendukung stres selama 5 detik daripada 5 jam.

-k: Ini dilakukan oleh browser fungsionalitas "KeepAlive". Anda tidak perlu memberikan nilai karena -k"boolean" (artinya: ini menunjukkan bahwa Anda ingin agar pengujian Anda menggunakan header Keep Alive dari HTTP dan mempertahankan koneksi). Karena browser melakukan ini dan Anda cenderung ingin mensimulasikan tekanan dan aliran yang akan dimiliki situs Anda dari browser, disarankan Anda melakukan patokan dengan ini.

Argumen terakhir hanyalah tuan rumah. Secara default ia akan menekan http: // protokol jika Anda tidak menentukannya.

ab -k -c 350 -n 20000 example.com/

Dengan mengeluarkan perintah di atas, Anda akan mencapai http://example.com/ dengan 350 koneksi simultan hingga 20 ribu permintaan terpenuhi. Ini akan dilakukan dengan menggunakan header tetap hidup.

Setelah proses menyelesaikan 20 ribu permintaan, Anda akan menerima umpan balik tentang statistik. Ini akan memberi tahu Anda seberapa baik kinerja situs di bawah tekanan yang Anda berikan ketika menggunakan parameter di atas.

Untuk mengetahui berapa banyak orang yang dapat ditangani situs pada saat yang sama, lihat saja apakah waktu respons (berarti, waktu respons minimum dan maksimum, permintaan gagal, dll.) Adalah angka yang dapat diterima oleh situs Anda (situs yang berbeda mungkin menginginkan kecepatan yang berbeda). Anda dapat menjalankan alat dengan nilai-c yang berbeda hingga Anda mencapai titik di mana Anda mengatakan "Jika saya meningkatkannya, itu mulai mendapatkan permintaan yang gagal dan rusak".

Bergantung pada situs web Anda, Anda akan mengharapkan jumlah permintaan rata-rata per menit. Ini sangat bervariasi, Anda tidak akan dapat mensimulasikan ini dengan ab. Namun, pikirkan seperti ini: Jika pengguna rata-rata Anda akan mencapai 5 permintaan per menit dan waktu respons rata-rata yang Anda temukan valid adalah 2 detik, itu berarti bahwa 10 detik dari satu menit 1 pengguna akan diminta, yang berarti hanya 1/6 dari waktu itu akan mengenai situs. Ini juga berarti bahwa jika Anda memiliki 6 pengguna yang memukul situs dengan ab secara bersamaan, Anda cenderung memiliki 36 pengguna dalam simulasi, meskipun tingkat concurrency Anda (-c) hanya 6.

Ini tergantung pada perilaku yang Anda harapkan dari pengguna Anda menggunakan situs ini, tetapi Anda bisa mendapatkannya dari "Saya berharap pengguna saya mencapai permintaan X per menit dan saya menganggap waktu respons rata-rata valid jika 2 detik". Kemudian, cukup modifikasi level -c Anda sampai Anda mencapai 2 detik waktu respon rata-rata (tetapi pastikan waktu respons maksimum dan stddev masih valid) dan lihat seberapa besar Anda dapat membuat -c.

Saya harap saya menjelaskan ini dengan jelas :) Selamat mencoba

Mamsaac
sumber
5
Jawaban langsung dan jelas! Bisakah Anda jelaskan sedikit lebih banyak tentang mengapa Anda mendapatkan ini "Ini juga berarti bahwa jika Anda memiliki 6 pengguna memukul situs dengan ab secara bersamaan, Anda cenderung memiliki 36 pengguna dalam simulasi, meskipun tingkat concurrency Anda (-c) hanya 6. "
kbariotis
3
Hanya sebagai pengingat, Anda mungkin ingin menambahkan -lopsi jika halaman memiliki konten yang dinamis, sehingga Anda tidak mendapatkan banyak permintaan yang gagal karena panjangnya konten berbeda antara permintaan.
JCM
73

Tolong tunjukkan perintah yang harus saya jalankan untuk mencari tahu.

Tes paling sederhana yang dapat Anda lakukan adalah melakukan 1000 permintaan, 10 sekaligus (yang kira-kira mensimulasikan 10 pengguna bersamaan yang masing-masing mendapatkan 100 halaman - selama pengujian).

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 adalah jumlah permintaan yang harus dibuat.

-c 10 memberi tahu AB untuk melakukan 10 permintaan sekaligus, alih-alih 1 permintaan sekaligus, untuk mensimulasikan lebih baik pengunjung konkuren (vs pengunjung berurutan).

-kmengirimkan KeepAliveheader, yang meminta server web untuk tidak mematikan koneksi setelah setiap permintaan dilakukan, tetapi tetap menggunakannya kembali.

Saya juga mengirim tajuk tambahan Accept-Encoding: gzip, deflatekarena mod_deflate hampir selalu digunakan untuk mengompresi keluaran teks / html 25% -75% - efeknya tidak boleh diabaikan karena berdampak pada kinerja keseluruhan server web (yaitu, dapat mentransfer 2x data dalam jumlah waktu yang sama, dll).

Hasil:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

Untuk interpretasi yang paling sederhana, abaikan semuanya TETAPI baris ini:

Requests per second:    704.23 [#/sec] (mean)

Lipat gandakan dengan 60, dan Anda memiliki permintaan Anda per menit.

Untuk mendapatkan hasil dunia nyata, Anda ingin menguji Wordpress alih-alih beberapa file HTML atau index.php statis karena Anda perlu tahu bagaimana semuanya bekerja bersama-sama: termasuk kode PHP yang rumit, dan beberapa permintaan MySQL ...

Sebagai contoh di sini adalah hasil pengujian instalasi baru Wordpress pada sistem yang sama dan lingkungan WAMP (Saya menggunakan WampDeveloper, tetapi ada juga Xampp, WampServer, dan lainnya) ...

Requests per second:    18.68 [#/sec] (mean)

Itu 37x lebih lambat sekarang!

Setelah uji beban, ada sejumlah hal yang dapat Anda lakukan untuk meningkatkan kinerja keseluruhan (Permintaan Per Detik), dan juga membuat server web lebih stabil di bawah beban yang lebih besar (mis., Meningkatkan -ndan -ccenderung menabrak Apache), yang Anda bisa baca di sini:

Muat Pengujian Apache dengan AB (Apache Bench)

benar
sumber
9

Langkah-langkah untuk mengatur Apache Bench (AB) di windows (IMO - Recommended).

Langkah 1 - Instal Xampp.
Langkah 2 - Buka CMD.
Langkah 3 - Pergi ke tujuan bangku apache ( cd C:\xampp\apache\bin) dari CMD
Langkah 4 - Tempel perintah ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
Langkah 5 - Tunggu. Anda selesai

Charitha Goonewardena
sumber
Itu tidak berfungsi ... Saya mendapatkan kesalahan ini: Membandingkan localhost (bersabar) ... apr_socket_recv: Sambungan ditolak (111)
Vijaysinh Parmar
ganti localhost dengan 127.0.0.1
akshaynagpal
3

Saya juga ingin tahu apakah saya dapat mengukur kecepatan skrip saya dengan apache abs atau skrip ukur konstruk / destruksi php atau ekstensi php.

dua yang terakhir telah gagal untuk saya: mereka adalah perkiraan. setelah itu saya berpikir untuk mencoba "ab" dan "abs".

perintah "ab -k -c 350 -n 20000 example.com/" cantik karena semuanya lebih mudah!

tetapi apakah ada yang berpikir untuk "localhost" di server apache misalnya www.apachefriends.org?

Anda harus membuat folder seperti "bangku" di root di mana Anda memiliki 2 file: test "bench.php" dan referensi "void.php".

dan kemudian: patok!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

pada Desktop Anda, Anda harus menggunakan file .bat (di Windows) seperti ini:

bangku

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

Sekarang jika Anda memperhatikan dengan cermat ...

skrip kosong tidak menghasilkan hasil nol !!! JADI KESIMPULAN ADALAH: dari hasil kedua hasil pertama harus dikurangi !!!

di sini saya mendapat:

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73 hasil yang saya harapkan!

Konstantin
sumber
2

Memuat pengujian API Anda dengan menggunakan ab saja tidak cukup. Namun, saya pikir ini adalah alat yang hebat untuk memberi Anda ide dasar bagaimana kinerja situs Anda.

Jika Anda ingin menggunakan perintah ab untuk menguji beberapa titik akhir API, dengan data yang berbeda, semuanya pada saat yang sama di latar belakang, Anda perlu menggunakan perintah "nohup". Ini menjalankan perintah apa pun bahkan ketika Anda menutup terminal.

Saya menulis sebuah skrip sederhana yang mengotomatiskan seluruh proses, jangan ragu untuk menggunakannya: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-ini-simple-shell-script

Ivan Kvasnica
sumber