Apache Bench - การตั้งค่าสภาพแวดล้อม

ในบทนี้เราจะแนะนำวิธีตั้งค่าสภาพแวดล้อมสำหรับ Apache Bench บน VPS ของคุณ

ความต้องการของระบบ

  • Memory - 128 ล้านบาท

  • Disk Space - ไม่มีข้อกำหนดขั้นต่ำ

  • Operating System - ไม่มีข้อกำหนดขั้นต่ำ

การติดตั้ง Apache Bench

Apache Bench เป็นแอปพลิเคชันแบบสแตนด์อะโลนและไม่มีการพึ่งพาการติดตั้งเว็บเซิร์ฟเวอร์ Apache ต่อไปนี้เป็นกระบวนการสองขั้นตอนในการติดตั้ง Apache Bench

Step 1 - อัปเดตฐานข้อมูลแพ็คเกจ

# apt-get update

โปรดทราบว่าสัญลักษณ์ # ก่อนคำสั่งเทอร์มินัลหมายความว่าผู้ใช้รูทกำลังออกคำสั่งนั้น

Step 2 - ติดตั้งแพ็คเกจ apache2 utils เพื่อเข้าถึง Apache Bench

# apt-get install apache2-utils

ตอนนี้ติดตั้ง Apache Bench แล้ว หากคุณต้องการทดสอบเว็บแอปพลิเคชันที่โฮสต์บน VPS เดียวกันก็เพียงพอที่จะติดตั้งเว็บเซิร์ฟเวอร์ Apache เท่านั้น -

# apt-get install apache2

ในฐานะยูทิลิตี้ Apache Apache Bench จะถูกติดตั้งโดยอัตโนมัติเมื่อติดตั้งเว็บเซิร์ฟเวอร์ Apache

การตรวจสอบการติดตั้ง Apache Bench

ตอนนี้ให้เราดูวิธีตรวจสอบการติดตั้ง Apache Bench รหัสต่อไปนี้จะช่วยตรวจสอบการติดตั้ง -

# ab -V

Output

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

เมื่อคุณเห็นเอาต์พุตเทอร์มินัลด้านบนหมายความว่าคุณติดตั้ง Apache Bench สำเร็จแล้ว

การสร้างผู้ใช้ Sudo ที่มีสิทธิ์

จากมุมมองด้านความปลอดภัยถือว่าเป็นแนวทางปฏิบัติที่ดีสำหรับผู้ดูแลระบบในการสร้างผู้ใช้ sudo แทนที่จะทำงานเป็นรูท เราจะสร้างผู้ใช้ทดสอบชื่อการทดสอบเพื่อจุดประสงค์ -

# useradd -m -d /home/test -g sudo test

ให้เราตั้งรหัสผ่านสำหรับผู้ใช้ใหม่ -

# passwd test

ระบบจะแจ้งให้ป้อนรหัสผ่านใหม่สำหรับการทดสอบผู้ใช้ คุณสามารถป้อนรหัสผ่านง่ายๆในขณะที่เรากำลังทดสอบและไม่ได้ปรับใช้กับเซิร์ฟเวอร์ที่ใช้งานจริง โดยปกติคำสั่ง sudo จะแจ้งให้คุณระบุรหัสผ่านผู้ใช้ sudo ขอแนะนำว่าอย่าใช้รหัสผ่านที่ซับซ้อนเนื่องจากกระบวนการจะยุ่งยาก

Output

Enter new UNIX password:
Retype new UNIX password:   
passwd: password updated successfully

ทดสอบเว็บไซต์ Apache.org

ในส่วนนี้เราจะทดสอบเว็บไซต์ Apache.org ให้เราเปลี่ยนไปใช้การทดสอบผู้ใช้ sudo ก่อน -

# su test

ในการเริ่มต้นเราจะทดสอบเว็บไซต์ขององค์กร Apache https://www.apache.org/. ก่อนอื่นเราจะเรียกใช้คำสั่งจากนั้นทำความเข้าใจกับผลลัพธ์ -

$ ab -n 100 -c 10 https://www.apache.org/

ที่นี่ -nคือจำนวนคำขอที่จะดำเนินการสำหรับเซสชันการเปรียบเทียบ ค่าเริ่มต้นคือเพียงดำเนินการตามคำขอเดียวซึ่งมักจะนำไปสู่ผลลัพธ์การเปรียบเทียบที่ไม่ใช่ตัวแทน

และ -cคือการเกิดขึ้นพร้อมกันและหมายถึงจำนวนคำขอหลายรายการที่จะดำเนินการในแต่ละครั้ง ดีฟอลต์คือหนึ่งคำขอในแต่ละครั้ง

ดังนั้นในการทดสอบนี้ Apache Bench จะส่งคำขอ 100 คำขอพร้อมกัน 10 ไปยังเซิร์ฟเวอร์ขององค์กร Apache

Output

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

Benchmarking www.apache.org (be patient).....done

Server Software:        Apache/2.4.7
Server Hostname:        www.apache.org
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path:          /
Document Length:        58769 bytes

Concurrency Level:      10
Time taken for tests:   1.004 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      5911100 bytes
HTML transferred:       5876900 bytes
Requests per second:    99.56 [#/sec] (mean)
Time per request:       100.444 [ms] (mean)
Time per request:       10.044 [ms] (mean, across all concurrent requests)
Transfer rate:          5747.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       39   46  30.9     41     263
Processing:    37   40  21.7     38     255
Waiting:       12   15  21.7     13     230
Total:         77   86  37.5     79     301

Percentage of the requests served within a certain time (ms)
  50%     79
  66%     79
  75%     80
  80%     80
  90%     82
  95%     84
  98%    296
  99%    301
 100%    301 (longest request)

หลังจากเรียกใช้การทดสอบครั้งแรกของเรามันจะง่ายต่อการจดจำรูปแบบการใช้งานสำหรับคำสั่งนี้ซึ่งมีดังนี้ -

# ab [options .....]  URL

ที่ไหน

  • ab - คำสั่ง Apache Bench

  • options - แฟล็กสำหรับงานเฉพาะที่เราต้องการดำเนินการ

  • URL - url เส้นทางที่เราต้องการทดสอบ

ทำความเข้าใจเกี่ยวกับค่าผลลัพธ์

เราจำเป็นต้องเข้าใจเมตริกต่างๆเพื่อทำความเข้าใจค่าเอาต์พุตต่างๆที่ส่งคืนโดย ab นี่คือรายการ -

  • Server Software - เป็นชื่อของเว็บเซิร์ฟเวอร์ที่ส่งคืนในส่วนหัว HTTP ของการส่งคืนครั้งแรกที่สำเร็จ

  • Server Hostname - เป็น DNS หรือที่อยู่ IP ที่ระบุในบรรทัดคำสั่ง

  • Server Port- เป็นพอร์ตที่ ab กำลังเชื่อมต่อ หากไม่มีการกำหนดพอร์ตในบรรทัดคำสั่งค่านี้จะเป็น 80 สำหรับ http และ 443 สำหรับ https

  • SSL/TLS Protocol- นี่คือพารามิเตอร์โปรโตคอลที่เจรจาระหว่างไคลเอนต์และเซิร์ฟเวอร์ สิ่งนี้จะถูกพิมพ์เมื่อใช้ SSL เท่านั้น

  • Document Path - นี่คือ URI คำขอที่แยกวิเคราะห์จากสตริงบรรทัดคำสั่ง

  • Document Length- เป็นขนาดไบต์ของเอกสารที่ส่งคืนสำเร็จครั้งแรก หากความยาวของเอกสารเปลี่ยนแปลงในระหว่างการทดสอบการตอบกลับจะถือเป็นข้อผิดพลาด

  • Concurrency Level - นี่คือจำนวนไคลเอนต์พร้อมกัน (เทียบเท่ากับเว็บเบราว์เซอร์) ที่ใช้ระหว่างการทดสอบ

  • Time Taken for Tests - นี่คือเวลาที่ใช้ตั้งแต่วินาทีที่สร้างการเชื่อมต่อซ็อกเก็ตแรกจนถึงช่วงเวลาที่ได้รับการตอบกลับล่าสุด

  • Complete Requests - จำนวนคำตอบที่ประสบความสำเร็จที่ได้รับ

  • Failed Requests- จำนวนคำขอที่ถือว่าล้มเหลว หากจำนวนมากกว่าศูนย์จะมีการพิมพ์อีกบรรทัดเพื่อแสดงจำนวนคำขอที่ล้มเหลวเนื่องจากการเชื่อมต่อการอ่านความยาวของเนื้อหาไม่ถูกต้องหรือข้อยกเว้น

  • Total Transferred- จำนวนไบต์ทั้งหมดที่ได้รับจากเซิร์ฟเวอร์ ตัวเลขนี้เป็นจำนวนไบต์ที่ส่งผ่านสาย

  • HTML Transferred- จำนวนไบต์เอกสารทั้งหมดที่ได้รับจากเซิร์ฟเวอร์ จำนวนนี้ไม่รวมไบต์ที่ได้รับในส่วนหัว HTTP

  • Requests per second- นี่คือจำนวนคำขอต่อวินาที ค่านี้เป็นผลมาจากการหารจำนวนคำขอด้วยเวลาทั้งหมดที่ดำเนินการ

  • Time per request- เวลาเฉลี่ยที่ใช้ต่อคำขอ ค่าแรกคำนวณด้วยสูตรพร้อมกัน * เวลาถ่าย * 1000 / เสร็จสิ้นในขณะที่ค่าที่สองคำนวณด้วยสูตรเวลาถ่าย * 1000 / เสร็จสิ้น

  • Transfer rate - อัตราการถ่ายโอนที่คำนวณโดยสูตร totalread / 1024 / Timetaken

การวิเคราะห์ผลการทดสอบโหลดอย่างรวดเร็ว

เมื่อได้เรียนรู้เกี่ยวกับส่วนหัวของค่าเอาต์พุตจากคำสั่ง ab แล้วให้เราลองวิเคราะห์และทำความเข้าใจค่าเอาต์พุตสำหรับการทดสอบเริ่มต้นของเรา -

  • องค์กร Apache ใช้ซอฟต์แวร์เซิร์ฟเวอร์เว็บของตนเอง - Apache (เวอร์ชัน 2.4.7)

  • เซิร์ฟเวอร์กำลังฟังบนพอร์ต 443 เนื่องจาก https หากเป็น http มันจะเป็น 80 (ค่าเริ่มต้น)

  • ข้อมูลทั้งหมดที่ถ่ายโอนคือ 58769 ไบต์สำหรับ 100 คำขอ

  • การทดสอบเสร็จสิ้นใน 1.004 วินาที ไม่มีคำขอที่ล้มเหลว

  • คำขอต่อวินาที - 99.56 นี่ถือว่าเป็นเลขที่ดีงาม

  • เวลาต่อคำขอ - 100.444 ms (สำหรับ 10 คำขอพร้อมกัน) สำหรับคำขอทั้งหมดคือ 100.444 ms / 10 = 10.044 ms

  • อัตราการถ่ายโอน - รับ 1338.39 [Kbytes / วินาที]

  • ในสถิติเวลาในการเชื่อมต่อคุณสามารถสังเกตได้ว่าคำขอจำนวนมากต้องรอสองสามวินาที อาจเป็นเพราะเว็บเซิร์ฟเวอร์ apache ส่งคำขอในคิวรอ

ในการทดสอบครั้งแรกของเราเราได้ทดสอบแอปพลิเคชัน (เช่น www.apache.org) ที่โฮสต์บนเซิร์ฟเวอร์อื่น ในส่วนต่อไปของบทช่วยสอนเราจะทดสอบตัวอย่างเว็บแอปพลิเคชันของเราที่โฮสต์บนเซิร์ฟเวอร์เดียวกันซึ่งเราจะทำการทดสอบ ab เพื่อความสะดวกในการเรียนรู้และการสาธิต ตามหลักการแล้วโหนดโฮสต์และโหนดทดสอบควรแตกต่างกันเพื่อการวัดที่แม่นยำ

เพื่อให้เรียนรู้ ab ได้ดีขึ้นคุณควรเปรียบเทียบและสังเกตว่าค่าผลลัพธ์แตกต่างกันอย่างไรสำหรับกรณีต่างๆในขณะที่เราก้าวไปข้างหน้าในบทช่วยสอนนี้

การพล็อตเอาต์พุตของ Apache Bench

ในที่นี้เราจะวางแผนผลลัพธ์ที่เกี่ยวข้องเพื่อดูว่าเซิร์ฟเวอร์ใช้เวลาเท่าใดเมื่อจำนวนคำขอเพิ่มขึ้น สำหรับสิ่งนั้นเราจะเพิ่มไฟล์-g ตัวเลือกในคำสั่งก่อนหน้าตามด้วยชื่อไฟล์ (ที่นี่ out.data) ซึ่งข้อมูลเอาต์พุต ab จะถูกบันทึก -

$ ab -n 100 -c 10 -g out.data https://www.apache.org/

ให้เราดูไฟล์ out.data ก่อนที่เราจะสร้างพล็อต -

$ less out.data

Output

starttime       seconds ctime   dtime   ttime   wait
Tue May 30 12:11:37 2017        1496160697      40      38      77      13
Tue May 30 12:11:37 2017        1496160697      42      38      79      13
Tue May 30 12:11:37 2017        1496160697      41      38      80      13
...

ตอนนี้ให้เราเข้าใจส่วนหัวคอลัมน์ในไฟล์ out.data ไฟล์ -

  • starttime - นี่คือวันที่และเวลาที่เริ่มการโทร

  • seconds - เหมือนกับเวลาเริ่มต้น แต่ในรูปแบบการประทับเวลา Unix (วันที่ -d @ 1496160697 ส่งกลับเอาต์พุตเวลาเริ่มต้น)

  • ctime - นี่คือเวลาเชื่อมต่อ

  • dtime - นี่คือเวลาดำเนินการ

  • ttime - นี่คือเวลาทั้งหมด (คือผลรวมของ ctime และ dtime, ttime ทางคณิตศาสตร์ = ctime + dtime)

  • wait - นี่คือเวลารอคอย

สำหรับการมองเห็นภาพว่ารายการต่างๆเหล่านี้เกี่ยวข้องกันอย่างไรให้ดูที่ภาพต่อไปนี้ -

หากเรากำลังทำงานบนเทอร์มินัลหรือในที่ที่ไม่มีกราฟิก gnuplotเป็นตัวเลือกที่ยอดเยี่ยม เราจะทำความเข้าใจได้อย่างรวดเร็วโดยทำตามขั้นตอนต่อไปนี้

ให้เราติดตั้งและเปิด gnuplot -

$ sudo apt-get install gnuplot  
$ gnuplot

Output

G N U P L O T
Version 4.6 patchlevel 6    last modified September 2014
Build System: Linux x86_64

Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others

gnuplot home:     http://www.gnuplot.info
faq, bugs, etc:   type "help FAQ"
immediate help:   type "help"  (plot window: hit 'h')

Terminal type set to 'qt'
gnuplot>

ในขณะที่เรากำลังทำงานบนเทอร์มินัลและสมมติว่ากราฟิกไม่พร้อมใช้งานเราสามารถเลือกเทอร์มินัลใบ้ซึ่งจะให้เอาต์พุตเป็น ASCII ผ่านเทอร์มินัลเอง สิ่งนี้ช่วยให้เราทราบว่าโครงเรื่องของเราเป็นอย่างไรด้วยเครื่องมือด่วนนี้ ตอนนี้ให้เราเตรียมเทอร์มินัลสำหรับ ASCII plot

gnuplot> set terminal dumb

Output

Terminal type set to 'dumb'
Options are 'feed  size 79, 24'

เนื่องจากเทอร์มินัล gnuplot ของเราพร้อมสำหรับการลงจุด ASCII แล้วให้เราพล็อตข้อมูลจากไฟล์ out.data ไฟล์ -

gnuplot> plot "out.data" using 9  w l

Output

1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
       +      +      +     +      +      +      +"out.data" using 9 ****** +
       |                                                                   |
  1200 ++                       ********************************************
       |     *******************                                           |
  1000 ++    *                                                            ++
       |     *                                                             |
       |     *                                                             |
   800 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   600 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   400 ++   *                                                             ++
       |    *                                                              |
   200 ++   *                                                             ++
       |    *                                                              |
       +****  +      +     +      +      +      +      +     +      +      +
     0 ++-----+------+-----+------+------+------+------+-----+------+-----++
       0      10     20    30     40     50     60     70    80     90    100

เราได้วางแผน ttime เวลาทั้งหมด (เป็นมิลลิวินาที) จากคอลัมน์ 9 ตามจำนวนคำขอ เราสามารถสังเกตเห็นว่าสำหรับการร้องขอสิบเริ่มต้นเวลาทั้งหมดอยู่ในเกือบ 100 มิลลิวินาที 30 คำขอถัดไป (ตั้งแต่ 10 ปีบริบูรณ์ถึง 40 ปีบริบูรณ์ ) ก็เพิ่มขึ้นถึง 1100 มิลลิวินาทีและอื่น ๆ พล็อตของคุณต้องแตกต่างกันขึ้นอยู่กับout.data.