A-AA+then

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

การวัดประสิทธิภาพของเว็บไซต์สามารถทำได้ง่ายๆด้วยโปรแกรม apachebench ครับ

apachebench เป็นโปรแกรมหนึ่งในชุดของ Apache ซึ่งถ้ามีการติดตั้ง XAMPP บน Windows โปรแกรมนี้จะอยู่ที่ D:\xampp\apache\bin\ab.exe สำหรับบน linux อาจไม่มีโปรแกรมนี้ติดตั้งมาด้วยเมื่อติดตั้ง Apache ซึ่งเราก็สามารถติดตั้งได้เองด้วยคำสั่ง (บน Ubuntu)
sudo apt-get install apache2-utils
วิธีการใช้งาน apachebench (ต่อไปนี้ผมจะเรียกสั้นๆว่า ab นะครับ)
โปรแกรมนี้มี options อยู่หลายตัวให้เลือกใช้นะครับ สามารถดูรายละเอียดของ options แบบเต็มๆได้ที่ https://httpd.apache.org/docs/2.2/programs/ab.html ซึ่งในบทความนี้ผมจะนำเสนอเฉพาะ options ที่ใช้ในการทดสอบเว็บไซต์แบบง่ายๆเท่านั้น
สำหรับบน Windows ให้เปิด cmd.exe ขึ้นมาและพิมพ์คำสั่งด้านล่างลงไป
D:\xampp\apache\bin\ab.exe -c 20 -n 20 -t 3 http://localhost/kotchasan/projects/benchmark/index.php?action=hello
D:\xampp\apache\bin\ab.exe ให้เปลี่ยนแปลงไปตาม path ที่ถูกต้องของโปรแกรมที่ใช้งานบนเครื่องนะครับ

ส่วนบน Linux ให้พิมพ์คำสั่งนี้ใน terminal
ab -c 20 -n 20 -t 3 http://localhost/kotchasan/projects/benchmark/index.php?action=hello
  • -c 20 concurrency จำนวน request ที่ส่งออกพร้อมๆกันในแต่ละครั้ง เปรียบเหมือนกับการมีจำนวนผู้เยี่ยมชมเว็บไซต์พร้อมๆกันนั่นเอง ถ้าไม่กำหนดจะหมายถึงการส่ง request ออกไปเพียงครั้งเดียว (คนเดียว)
  • -n 20 requests จำนวนครั้งทั้งหมดในการทดสอบ ถ้าไม่กำหนดจะหมายถึงส่งทดสอบเพียงครั้งเดียว เราควรจะกำหนดค่านี้ไว้จำนวนหนึ่งเพื่อความถูกต้องในการทดสอบ ซึ่งผลการทดสอบจะได้จากค่าเฉลี่ยตามจำนวนครั้งในการทดสอบ
  • -t 3 timelimit กำหนดช่วงเวลาสูงสุด (วินาที) สำหรับการเปรียบเทียบแต่ละครั้ง โปรแกรมจะส่งการทดสอบครั้งถัดไปตามเวลาที่กำหนดนี้ ถ้าไม่กำหนดค่านี้โปรแกรมจะทำการส่งการเปรียบเทียบแบบต่อเนื่อง 
  • ค่าสุดท้ายที่ส่งคือ URL ที่จะทำการทดสอบ ถ้าเป็นโดเมน จะต้องมี / ต่อท้ายชื่อโดเมนด้วย
ดังนั้นความหมายของการทดสอบตามด้านบนคือ ส่งการทดสอบทั้งหมด 20 ครั้ง ครั้งละ 20 request พร้อมๆกัน โดยเว้นระยะห่างแต่ละครั้งจำนวน 3 วินาที
ผลการทดสอบเป็นไปตามรายละเอียดด้านล่าง
  • Concurrency Level จำนวน connection ต่อ 1 request ตามที่เรากำหนดไป
  • Time taken for tests ช่วงเวลาการเชื่อมต่อแต่ละครั้งหลังจากการเชื่อมต่อครั้งก่อนหน้าเสร็จสิ้น
  • Complete requests จำนวนผลการทดสอบสำเร็จทั้งหมด
  • Failed requests จำนวนผลการทดสอบล้มเหลวทั้งหมด ค่านี้ควรเป็น 0 ถ้าค่านี้ไม่ใช่ 0 แสดงว่า Server มีความล้มเหลวระหว่างการทดสอบ
  • Requests per second ค่าเฉลี่ยการทดสอบต่อวินาที ค่านี้ยิ่งมากยิ่งดี ซึ่งจะหมายความถึงประสิทธิภาพในการรับจำนวนผู้เยี่ยมชม
  • Time per request ช่วงเวลาเฉลี่ยสำหรับการตอบสนองต่อ 1 request ค่านี้ยิ่งน้อยยิ่งดี
การทำการทดสอบด้วย apachebench นี้สามารถทำการทดสอบได้ทั้งบนเครื่องตัวเอง และเครื่องที่ออนไลน์อยู่ ซึ่งเราสามารถใช้ผลการทดสอบนี้ในการเปรียบเทียบเพื่อการปรับแต่งโค้ด หรือ ปรับแต่ง Server ให้มีประสิทธิภาพมากที่สุด โดยเราสามารถกำหนดตัวเลือกต่างๆเพื่อจำลองการเยี่ยมชมเว็บไซต์พร้อมๆกันได้
หมายเหตุ
concurrency จะสามารถกำหนดค่าได้สูงสุดค่าหนึ่งเท่านั้น ตามที่กำหนดโดยเครื่องที่ใช้ในการทดสอบ และ ไม่ควรกำหนดให้มากจนเกินไป หรือ นำไปใช้ทดสอบเว็บไซต์คนอื่นด้วยการทดสอบแบบหนักหน่วง เพราะอาจทำให้เว็บไซต์ที่ทำการทดสอบเกิดความเสียหายได้

Relate

^