LevelUp! Studio » apachebench https://blog.levelup.in.th Experience the new world. Fri, 26 May 2017 10:06:07 +0000 th hourly 1 http://wordpress.org/?v=3.8.1 ทดสอบประสิทธิภาพเครื่องด้วย apachebench + newrelic https://blog.levelup.in.th/2011/07/31/test-web-performance-with-apachebench-newrelic%e0%b8%97%e0%b8%94%e0%b8%aa%e0%b8%ad%e0%b8%9a%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%b4%e0%b8%97%e0%b8%98%e0%b8%b4%e0%b8%a0%e0%b8%b2%e0%b8%9e/ https://blog.levelup.in.th/2011/07/31/test-web-performance-with-apachebench-newrelic%e0%b8%97%e0%b8%94%e0%b8%aa%e0%b8%ad%e0%b8%9a%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%b4%e0%b8%97%e0%b8%98%e0%b8%b4%e0%b8%a0%e0%b8%b2%e0%b8%9e/#comments Sun, 31 Jul 2011 14:41:14 +0000 http://blog.levelup.in.th/?p=1159 ช่วงนี้กำลังทดสอบประสิทธิภาพ 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 มีประโยชน์มากจริงๆ ครับ :)

]]>
https://blog.levelup.in.th/2011/07/31/test-web-performance-with-apachebench-newrelic%e0%b8%97%e0%b8%94%e0%b8%aa%e0%b8%ad%e0%b8%9a%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%aa%e0%b8%b4%e0%b8%97%e0%b8%98%e0%b8%b4%e0%b8%a0%e0%b8%b2%e0%b8%9e/feed/ 0