ดีฟอลต์คอนฟิกที่ได้จากการติดตั้งโปรแกรมจากไฟล์ rpm หรือ วิธีอื่นๆ นั้น สามารถนำมาใช้งานและทำงานได้ในระดับหนึ่ง
แต่ถ้าโปรแกรมเช่นเว็บเซิร์ฟเวอร์ ถ้าต้องให้บริการต่อผู้ใช้จำนวนมากขึ้น จำเป็นต้องปรับแต่งคอนฟิกเพิ่มเติม เพื่อให้ใช้ฮาร์ดแวร์ของเครื่องได้เต็มประสิทธิภาพ
ab เป็นโปรแกรมทดสอบเว็บเซิร์ฟเวอร์อย่างง่ายๆ โปรแกรมหนึ่งที่ติดตั้งมาพร้อมกับ Apache Web Server ถ้าเป็นไฟล์ rpm ก็อยู่ใน httpd-tools
เราสามารถนำ ab มาใช้ทดสอบเพื่อวัดผลได้ว่า เว็บเซิร์ฟเวอร์ที่กำลังแก้ไขคอนฟิกอยู่นั้น สามารถรองรับการใช้งานได้เท่าไร (requests per second) หากเราเปลี่ยนคอนฟิกไป ผลที่ได้จะเป็นอย่างไร
สร้างไฟล์ทดสอบด้วยคำสั่ง echo ตามตัวอย่าง
[root@cent6 ~]# echo 'hello' > /var/www/html/test.html
[root@cent6 ~]# cat /var/www/html/test.html hello
[root@cent6 ~]# ls -l /var/www/html/test.html
-rw-r--r--. 1 root root 6 Jun 9 14:29 /var/www/html/test.html
หมายเหตุ สังเกตว่า ไฟล์เว็บ test.html ที่สร้างประกอบด้วยตัวอักษรเพียง 5 ตัวเท่านั้น แต่เมื่อใช้คำสั่ง ls -l ดูขนาดไฟล์กลายเป็นมีขนาด 6 bytes เป็นเพราะว่า คำสั่ง echo ถ้าไม่ได้ระบุออปชั่น “-n” จะมีอักขระพิเศษซ่อนอยู่คือ new line “\n” ต่อท้ายมาด้วย ซึ่งถ้าต้องการดู สามารถใช้คำสั่ง od เพื่อดูได้
[root@cent6 ~]# od -c /var/www/html/test.html
0000000 h e l l o \n
0000006
รันคำสั่ง ab
ไม่จำเป็นต้องรันคำสั่ง ab บนเครื่องเว็บเซิร์ฟเวอร์ที่เรากำลังแก้ไขคอนฟิกอยู่ สามารถรันบนเครื่องไหนก็ได้ แล้วก็สามารถทดสอบไปเว็บเซิร์ฟเวอร์ที่ไหนก็ได้
รูปแบบการใช้ก็ง่ายเพียงแค่รันคำสั่ง ab แล้วตามด้วยออปชั่น (ถ้ามี) แล้วตามด้วย url ของเว็บไซต์
ตัวอย่างการรันคำสั่ง ab ไม่ระบุออปชั่นเพื่อทดสอบ www.google.com
[user1@client ~]$ ab http://www.google.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.google.com (be patient).....done Server Software: gws Server Hostname: www.google.com Server Port: 80 Document Path: / Document Length: 221 bytes Concurrency Level: 1 Time taken for tests: 0.182 seconds Complete requests: 1 Failed requests: 0 Write errors: 0 Non-2xx responses: 1 Total transferred: 2058 bytes HTML transferred: 221 bytes Requests per second: 5.48 [#/sec] (mean) Time per request: 182.327 [ms] (mean) Time per request: 182.327 [ms] (mean, across all concurrent requests) Transfer rate: 11.02 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 51 51 0.0 51 51 Processing: 131 131 0.0 131 131 Waiting: 122 122 0.0 122 122 Total: 182 182 0.0 182 182
หากไม่ได้ระบุออปชั่นใดๆ เลย จะเป็นการทดสอบเข้าเว็บไซต์ url นั้นเพียงครั้งเดียว แต่ถ้าต้องการระบุจำนวนครั้งในการทดสอบ (Number of requests) ต้องระบุออปชั่น “-n” และ
ถ้าต้องการส่งทดสอบพร้อมๆ กัน (concurrency) ให้ระบุออปชั่น “-c”
เช่น ต้องการทดสอบเว็บเซิร์ฟเวอร์ http://192.168.5.62 จำนวนทั้งหมด 100 ครั้ง แต่ให้ส่งการทดสอบพร้อมๆ กัน (concurrency) ครั้งละ 20 สามารถทำได้ดังนี้
[user1@client ~]$ ab -n 100 -c 20 http://192.168.5.62/test.html 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 192.168.5.62 (be patient).....done Server Software: Apache/2.2.15 Server Hostname: 192.168.5.62 Server Port: 80 Document Path: /test.html Document Length: 6 bytes Concurrency Level: 20 Time taken for tests: 0.189 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 28016 bytes HTML transferred: 618 bytes Requests per second: 528.76 [#/sec] (mean) Time per request: 37.824 [ms] (mean) Time per request: 1.891 [ms] (mean, across all concurrent requests) Transfer rate: 144.67 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 8 10.5 5 34 Processing: 7 27 26.8 12 115 Waiting: 5 26 25.8 11 112 Total: 12 36 33.1 16 133 Percentage of the requests served within a certain time (ms) 50% 16 66% 24 75% 51 80% 57 90% 95 95% 118 98% 133 99% 133 100% 133 (longest request)
เราสามารถนำผลลัพธ์ที่ได้ ไปใช้เปรียบเทียบก่อนและหลังการเปลี่ยนคอนฟิกของเว็บเซิร์ฟเวอร์
socket: Too many open files
หากระบุออปชั่น -c เป็นจำนวนมากกว่า 1024 จะขึ้น error แบบนี้
[user1@client ~]$ ab -n 10000 -c 2000 http://192.168.5.62/test.html 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 192.168.5.62 (be patient) socket: Too many open files (24)
สาเหตุเป็นเพราะดีฟอลต์จำนวนการเปิดไฟล์สูงสุด (open files) ของแต่ละ user ในลีนุกซ์หลายๆ เวอร์ชั่น เช่น CentOS กำหนดไว้แค่ 1024 เท่านั้น หากผู้ใช้รันโปรแกรม (concurrency) มากกว่านี้ จะทำให้เกิด error
ใช้คำสั่ง ulimit -n เพื่อดูค่านี้ได้
[user1@client ~]$ ulimit -n 1024
เราสามารถเพิ่มจำนวนการเปิดไฟล์สูงสุดนี้ได้ ในไฟล์ /etc/security/limits.conf
ค่าสูงสุดดูได้จากไฟล์ /proc/sys/fs/file-max ที่จริง เราก็สามารถแก้ไขค่านี้ได้เหมือนกัน แต่ในที่นี้ขอไม่พูดถึง
[root@cent6 ~]# cat /proc/sys/fs/file-max 98305
ใช้ root เพื่อแก้ไขไฟล์ limits.conf
[root@cent6 ~]# cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
# - an user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
...
#<domain> <type> <item> <value>
#
* - nofile 5000
# End of file
การแก้ไขตามตัวอย่างด้านบนคือกำหนดให้ user ทุกคน (*) ทั้งค่า hard และ soft (-) สามารถเปิดไฟล์ได้สูงสุด (nofile) เท่ากับ 5000 ไฟล์
แล้วล็อกอินด้วย user อีกครั้ง ลองใช้คำสั่ง ulimit -n เพื่อดูค่าที่เพิ่มขึ้น
[user1@client ~]$ ulimit -n 5000
ลองรัน ab ทดสอบใหม่อีกครั้ง
[user1@client ~]$ ab -n 10000 -c 2000 http://192.168.5.62/test.html
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 192.168.5.62 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
...
ข้อมูลอ้างอิง
- man ab หรือ ab -h