ทดสอบประสิทธิภาพเครื่องด้วย apachebench + newrelic by heha
Jul0
ช่วงนี้กำลังทดสอบประสิทธิภาพ server เลยต้องใช้งาน apachebench (ขอเรียกสั้นๆ ว่า ab) เป็น tools ในการทดสอบประสิทธิภาพ server อย่างหนึ่ง หลังจากลงโปรแกรมแล้ว เราสามารถทดสอบการใช้งานได้ดังนี้
ลองพิมพ์คำสั่งด้านล่างกัน โดย -n คือจำนวน request ทั้งหมดที่จะยิง และ -c คือจำนวน concurrent connection ที่จะใช้ (คือจำลองว่ามีผู้ใช้เข้าใช้งานพร้อมกันกี่คนนั่นเอง) โดยเวลาพิมพ์ชื่อเว็บอย่าลืมพิมพ์ / ต่อท้ายด้วยไม่งั้นจะยิงไม่ได้ ผลจะเป็นดังนี้
ab -n 100 -c 10 http://www.sanook.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.sanook.com (be patient)…..done
Server Software: Apache
Server Hostname: www.sanook.com
Server Port: 80
Document Path: /
Document Length: 154040 bytes
Concurrency Level: 10
Time taken for tests: 2.523 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 15435200 bytes
HTML transferred: 15404000 bytes
Requests per second: 39.64 [#/sec] (mean)
Time per request: 252.255 [ms] (mean)
Time per request: 25.225 [ms] (mean, across all concurrent requests)
Transfer rate: 5975.49 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 3 1.5 2 16
Processing: 43 222 180.5 154 885
Waiting: 2 11 40.4 3 210
Total: 45 225 181.0 156 891
Percentage of the requests served within a certain time (ms)
50% 156
66% 275
75% 294
80% 313
90% 494
95% 542
98% 707
99% 891
100% 891 (longest request)
จากผลลัพท์นี้จะเห็นว่าได้ sanook.com รับได้ 39.64 Request/sec และใช้เวลาตอบสนองคือ min 45, mean 225, max 891 millisec ซึ่งเราสามารถทดลองเพิ่มค่า -n และ -c เพื่อเพิ่มขนาดจำนวน load ที่จะยิงได้ตามใจ โดยผมลองยิง server ตัวเอง (ควรจะยิงจากเครื่องอื่นที่ไม่ใช่ webserver เพราะ ab นั้นกินพลัง cpu ด้วยเช่นกัน จะทำให้ค่าที่วัดคลาดเคลื่อนได้ถ้ารันในเครื่องเดียวกับ webserver) ด้วยค่า -n 1000 – c 100 (มีคนเข้าพร้อมกัน 100 คน ทดสอบเมื่อคนเข้าเยอะมากๆ นั่นเอง) และเว็บผมได้ติด Newrelic ดู performance อยู่กรณีมีคนเข้าเยอะผลจะเป็นอย่างไร ได้ผลเป็น 40.20 Request/sec ใช้เวลาตอบสนอง min 215, mean 2313, max 3877 (ยิงด้วยเครื่องที่อยู่ในวง network เดียวกัน) และได้ผลจาก newrelic ออกมาดังรูป
จากรูปก็จะเห็นว่าเมื่อมี Request เพิ่มมากขึ้นแล้ว จะทำให้ php ช้าขึ้นมากอย่างเห็นได้ชัด(กราฟที่แสดงส่วนของ php นี้รวมเวลาทั้ง webserver และ php ไว้ด้วยกัน) ส่วน Database ของผมแม้จะมี Request มากขึ้น แต่ก็ไม่ส่งผลให้ช้าลงมากนัก จึงเป็นอันสรุปได้ง่ายๆ เลยว่า Bottleneck ของ application ตัวนี้เวลาคนเข้าเยอะๆ อยู่ที่ php/webserver นั่นเอง โดยสามารถตัดประเด็นเรื่อง Database ออกไปได้เลย มา optimize ที่ตัว code php และการ set ค่าต่างๆ ของตัว server เองต่อไป ซึ่งตัวผมเองได้ใช้เอามาเปรียบเทียบการเปลี่ยน webserver จาก apache เป็น nginx ก็เห็นผลได้ค่อนข้างชัดเจนเช่นกัน จะเห็นได้ว่า ab มีประโยชน์มากจริงๆ ครับ
Enjoy this article?
Consider subscribing to our RSS feed!
ไม่มีความเห็น
ยังไม่มีความเห็น