← กลับไปยังบทความทั้งหมด

เครื่องมือทดสอบประสิทธิภาพเว็บเซิร์ฟเวอร์ ApacheBench

สรุปใจความสำคัญ

  • เป็นเครื่องมือแบบ Command Line ที่ใช้สำหรับวัดประสิทธิภาพ (Benchmark) ของ HTTP Web Server
  • พัฒนาต่อยอดมาจาก ZeusBench V1.0 ที่เขียนโดย Adam Twiss ในปี 1996
  • ทำงานแบบ Single-threaded ซึ่งอาจเป็นคอขวดเมื่อทดสอบเซิร์ฟเวอร์ประสิทธิภาพสูงบนเครื่อง Multi-core
  • เป็นซอฟต์แวร์โอเพนซอร์สภายใต้ Apache License

ApacheBench หรือที่รู้จักในชื่อไฟล์โปรแกรม ab เป็นโปรแกรมคอมพิวเตอร์แบบบรรทัดคำสั่ง (Command Line) ที่ทำงานแบบเธรดเดียว (Single-threaded) ออกแบบมาเพื่อใช้ในการวัดประสิทธิภาพ (Benchmarking) ของเว็บเซิร์ฟเวอร์ที่รองรับโปรโตคอล HTTP โดยเฉพาะ

แม้ว่าในระยะแรกจะถูกพัฒนาขึ้นเพื่อทดสอบ Apache HTTP Server แต่ด้วยลักษณะการทำงานที่เป็นมาตรฐาน ทำให้ ApacheBench สามารถนำไปใช้ทดสอบเว็บเซิร์ฟเวอร์ใดก็ได้ที่รองรับโปรโตคอล HTTP เวอร์ชัน 1.0 หรือ 1.1

ประวัติและการพัฒนา

โปรแกรมนี้มีต้นกำเนิดมาจากโปรแกรมที่ชื่อว่า zb หรือ ZeusBench V1.0 ซึ่งเขียนขึ้นโดย Adam Twiss จากบริษัท Zeus Technology ในปี ค.ศ. 1996 เพื่อใช้ทดสอบประสิทธิภาพของ Zeus Web Server ต่อมา Twiss ได้มอบสิทธิ์การใช้งาน (License) ให้กับกลุ่ม Apache ทำให้โปรแกรมถูกนำมาพัฒนาต่อและเปลี่ยนชื่อเป็น ApacheBench (ab)

ตั้งแต่ปี ค.ศ. 1997 และ 1998 เป็นต้นมา ApacheBench ได้รับการพัฒนาและบำรุงรักษาอย่างต่อเนื่องในฐานะโปรแกรมสนับสนุนที่มาพร้อมกับชุดซอร์สโค้ดของ Apache HTTP Server โดยมีการพัฒนาตั้งแต่เวอร์ชัน 1.0 จนถึงเวอร์ชัน 2.3 ในปี ค.ศ. 2021 และเวอร์ชันถัดมา

ลักษณะทางเทคนิคและการทำงาน

ApacheBench เขียนด้วยภาษา C และเป็นซอฟต์แวร์โอเพนซอร์ส (Open Source) ที่เผยแพร่ภายใต้สัญญาอนุญาต Apache License ซึ่งทำให้ผู้ใช้งานสามารถนำไปใช้และปรับปรุงได้ฟรี

การทำงานแบบ Concurrency และข้อจำกัดด้านเธรด

จุดสำคัญที่ผู้ใช้งานควรทราบคือ ApacheBench จะใช้เธรดของระบบปฏิบัติการเพียงเธรดเดียวเท่านั้น ไม่ว่าผู้ใช้จะกำหนดระดับความพร้อมกัน (Concurrency) ผ่านพารามิเตอร์ -c ไว้สูงเพียงใดก็ตาม

ในกรณีที่ทดสอบเว็บเซิร์ฟเวอร์ที่มีประสิทธิภาพสูงมาก ตัวโปรแกรม ApacheBench เองอาจกลายเป็นคอขวด (Bottleneck) ของการทดสอบได้ ดังนั้น สำหรับเครื่องคอมพิวเตอร์ที่มีหน่วยประมวลผลหลายคอร์ (Multi-core CPU) ผู้ทดสอบอาจจำเป็นต้องรัน ApacheBench หลายอินสแตนซ์พร้อมกันแบบขนาน เพื่อให้สามารถส่งคำขอได้มากพอที่จะทดสอบขีดจำกัดของเซิร์ฟเวอร์เป้าหมายได้อย่างเต็มที่

การระบุตัวตน (User Agent)

เมื่อ ApacheBench ส่งคำขอไปยังเซิร์ฟเวอร์ จะมีการระบุ User Agent ในรูปแบบ ApacheBench/MAJOR.MINOR (โดยที่ MAJOR และ MINOR คือเลขเวอร์ชันของโปรแกรม) ซึ่งเครื่องมือวิเคราะห์ล็อกของเว็บเซิร์ฟเวอร์บางตัว เช่น Webalizer หรือ AWStats อาจไม่สามารถจัดหมวดหมู่ User Agent นี้ได้อย่างถูกต้อง ส่งผลให้การรันการทดสอบด้วยจำนวนคำขอจำนวนมากอาจทำให้ข้อมูลในรายงานสถิติของเว็บเซิร์ฟเวอร์คลาดเคลื่อนได้

ตัวอย่างการใช้งาน

การใช้งานพื้นฐานผ่านบรรทัดคำสั่ง เช่น การส่งคำขอ HTTP GET จำนวน 10,000 ครั้ง โดยกำหนดให้มีการประมวลผลพร้อมกันสูงสุด 10 คำขอ ไปยัง URL ที่ระบุ (เช่น http://localhost/index.html) ซึ่งหมายความว่าต้องมีเว็บเซิร์ฟเวอร์ทำงานอยู่ที่พอร์ต 80 บนเครื่องเดียวกันกับที่รันโปรแกรม ab

คำถามที่พบบ่อย

ApacheBench สามารถใช้ทดสอบเว็บเซิร์ฟเวอร์อื่นที่ไม่ใช่ Apache ได้หรือไม่?

ได้ ApacheBench มีลักษณะการทำงานที่เป็นกลางและสามารถทดสอบเว็บเซิร์ฟเวอร์ใดก็ได้ที่รองรับโปรโตคอล HTTP/1.0 หรือ HTTP/1.1

ทำไมการรัน ApacheBench เพียงตัวเดียวถึงอาจไม่เพียงพอสำหรับเซิร์ฟเวอร์ขนาดใหญ่?

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

การใช้ ApacheBench ส่งผลกระทบต่อ Log ของเว็บเซิร์ฟเวอร์อย่างไร?

ApacheBench จะระบุ User Agent เป็น 'ApacheBench/เวอร์ชัน' ซึ่งเครื่องมือวิเคราะห์ Log บางตัวอาจไม่รู้จัก ทำให้สถิติการเข้าชมเว็บไซต์ในรายงาน (เช่น จำนวนผู้เข้าชม) สูงเกินความเป็นจริงในช่วงที่มีการทดสอบ