Sep 26, 2010

web performance test by httperf

httperf เป็น tool ที่มีมาค่อนข้างนานแล้ว เท่าที่ลองหามาก็มีตัวนี้แหละที่ค่อนข้างจะมี feature ที่หลากหลาย ที่พอจะเอามาถูไถทำ performance test ได้

อีกตัวที่พอทำได้คือ ab  แต่ผมยังหาวิธีที่จะให้ ab ยิง url ตามที่เราต้องการที่ไม่ใช่ fix 1 url  ไม่ได้ ก็เลยมองมาที่ httperf 

แต่กว่าจะหาทางให้มันทำงานได้ตามที่ต้องการก็ค้นกันนานเหมือนกัน เพราะ input file ที่ httperf ต้องการนำไปใช้เป็น input url นั้น มี format ที่พิศดารไม่เหมือนชาวบ้านเลย
tutorial คงไม่แนะนำ เข้าสู่ command ที่ใช้ยิงกันเลย
httperf --hog --server=test --wlog=n,/root/httperf/uri_80k.txt --num-conns=80000 --ra=1000
 
--hog : ต้องระบุ เพราะถ้าไม่ระบุ httperf จะใช้ port แค่ 1024-5000 เท่านั้น ซึ่งไม่เพียงพอต่อการยิง test  
--server : domain ของ server ที่ต้องการส่ง traffic ไป (มันจะ auto set Host: ด้วยค่า --server=xx นี้ไปใน http request header ให้เลย)
--wlog : [y|n] n คือไม่ต้องวนลูป ยิง url ใน file /root/httperf/uri_80k.txt เลย 
--num-conns : ระบุจำนวน http request ที่จะให้ส่งไป server ปลายทาง (ผมใช้วิธี gen url ที่จะยิง 80000 url, ดังนั้นก็เลยจะส่ง num-conns =80000 ไปเช่นกัน)
--ra : rate ที่ต้องการส่งไปเท่ากับ 1000 conn/second 

วิธีการ gen file 
ลองเอาไปประยุกต์เอาเองนะครับ ผมใช้วิธีเขียน perl script ง่ายๆ ใช้ ASCII NUL เป็นตัวคั่นระหว่าง URL
#!/usr/bin/perl
for ($i=1;$i<=80000;$i++) {
        print '/myurl.php?id=' . $i ." \0";
}

No comments: