ปัญหาการทดสอบเว็บไซต์ด้วย apachebench แล้วได้ผลการทดสอบที่เร็วผิดปกติ
ปัญหานี้เกิดขึ้นระหว่างที่ผมกำลังทำการทดสอบความเร็วเว็บไซต์ด้วย apachebench ครับ เนื่องจากสังเกตุพบว่าผลการทดสอบมันดูผิดปกติ
ด้านล่างนี้คือรูปภาพของเว็บไซต์ที่ต้องการจะทดสอบ และมันก็สามารถทำงานได้เป็นปกติดี จะเห็นว่าผมเรียกไปยัง URL http://siamlearning.org (จากรูป) และก็ยังสามารถเรียกไปยัง URL ปกติ เช่น http://www.siamlearning.org/index.php ได้เช่นกัน
ยกแรก ผมทดสอบด้วยคำสั่ง
ได้ผลทดสอบดังรูปด้านล่าง
จะเห็นว่าได้ผลการทดสอบสูงทีเดียว (Requests per second) 896 รีเควสต่อวินาที ซึ่งผลที่ได้ก็ดูน่าจะดีใจนะครับ แต่เนื่องจากผมได้มีการทดสอบจากหลายๆแหล่งและหลากหลายรูปแบบ ผมมองว่ามันผิดปกติ
ผมทำการทดสอบในยกที่สอง ด้วยคำสั่ง
จะเห็นว่าผมเพิ่ม -v2 ลงในคำสั่งด้วย ซึ่งคำสั่งนี้จะทำให้ apachebench แสดงผล header ที่ได้จากการทดสอบออกมาด้วย โดยได้ผลทดสอบดังรูปด้านล่าง
จะเห็นว่าผลการทดสอบมี header HTTP/1.1 301 Moved Permanetly ส่งกลับมาด้วย และถ้าดูจากเนื้อหาที่ส่งกลับมาก็ไม่ใช่เนื้อหาปกติ (301 Moved Permanetly หมายถึงมีการ redirect หน้าไปยังหน้าอื่น) เลยได้ผลการทดสอบสูงผิดปกติ
การแก้ไข
ในกรณีข้างต้นก็ให้ส่ง URL ที่ไม่มีการ redirect เข้าไปแทน ซึ่งจากเว็บตัวอย่างผมส่ง URL http://www.siamlearning.org/index.php แทน (เป็น URL ที่มีการ Redirect ไป)
ได้ผลตอบกลับที่ถูกต้องตามด้านล่าง HTTP/1.1 200 OK
จริงๆผลการทดสอบอาจเจอ Error อื่นๆได้อีก เช่น 403 404 หรือ 503 (ในขณะที่การเปิดเว็บไซต์ผ่านบราวเซอร์สามารถทำได้ปกติ) ดังนั้น ในการทดสอบให้สังเกตุผลการทดสอบให้ดี และแก้ปัญหาตามค่าที่ส่งมาให้ถูกต้อง ซึ่งผลลัพท์ตอบกลับที่ถูกต้อง ต้องเป็น 2xx เท่านั้น
ยกตัวอย่างที่ผมเคยเจอ เช่น ได้รับค่าตอบกลับเป็น 404 (หมายถึงไม่พบหน้าเพจ) ปัญหานี้ผมพบว่าเกิดจาก hostname ของ Server ไม่ถูกต้อง
คำแนะนำในการทดสอบ
- เปิดเว็บไซต์บนบราวเซอร์ได้ ไม่ได้ประกันว่าจะสามารถทำการทดสอบได้ถูกต้อง
- การตรวจสอบด้วย apachebench ควรใส่ -v2 ลงไปด้วยเสมอ เพื่อดูว่าผลตอบกลับถูกต้องหรือไม่
- การทดสอบด้วย apachebench สามารถตรวจสอบออนไลน์ได้ เช่น ทดสอบจากเครื่องของเราไปยัง Server ที่ออนไลน์อยู่ ซึ่งได้ผลใกล้เคียงกัน แต่ผลลัพท์ที่ได้จะรวมประสิทธิภาพของ Server ด้วย
- ถ้าต้องการทดสอบประสิทธิภาพของสคริปต์ แนะนำให้ทำการทดสอบบน localhost จะให้ผลการทดสอบสำหรับสคริปต์ที่แม่นยำกว่า
- หากทำการทดสอบด้วยสคริปต์ (shell script) จะต้องทำการทดสอบภายใต้โฟลเดอร์ของสคริปต์เท่านั้นถึงจะให้ผลการทดสอบที่ถูกต้อง