จะทำเกณฑ์มาตรฐานประสิทธิภาพของเว็บเซิร์ฟเวอร์ได้อย่างไร

คุณทราบเวลาตอบสนองเฉลี่ยของเว็บไซต์ของคุณหรือไม่ คุณทราบหรือไม่ว่าไซต์ของคุณสามารถจัดการผู้ใช้พร้อมกันได้กี่คน

การทดสอบโหลดเป็นสิ่งสำคัญสำหรับเว็บแอปพลิเคชันเพื่อทราบความจุของเว็บไซต์ หากคุณต้องเลือกเว็บเซิร์ฟเวอร์ สิ่งแรกที่คุณต้องทำคือทำการทดสอบโหลดและดูว่าเซิร์ฟเวอร์ใดทำงานได้ดีสำหรับคุณ

การเปรียบเทียบสามารถช่วยคุณตัดสินใจได้

  • เว็บเซิร์ฟเวอร์ใดทำงานได้ดีที่สุด
  • จำนวนเซิร์ฟเวอร์ที่คุณต้องการให้บริการ x จำนวนคำขอ
  • การกำหนดค่าใดให้ผลลัพธ์ที่ดีที่สุดแก่คุณ
  • กลุ่มเทคโนโลยีใดทำงานได้ดีกว่ากัน
  • เมื่อไซต์ของคุณจะทำงานช้าลงหรือเสีย

มีเครื่องมือออนไลน์มากมายสำหรับทำการทดสอบความเครียด อย่างไรก็ตาม หากคุณกำลังมองหาโซลูชันภายในองค์กรหรือต้องการวัดประสิทธิภาพเฉพาะประสิทธิภาพของเว็บเซิร์ฟเวอร์ คุณสามารถใช้ ApacheBench และเครื่องมืออื่นๆ ที่แสดงรายการด้านล่าง

ฉันใช้เว็บเซิร์ฟเวอร์ Apache & Nginx ที่โฮสต์อยู่ ดิจิตอลโอเชี่ยน เพื่อทดสอบ

ApacheBench

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

อาปาเช่

มาติดตั้ง ApacheBench โดยใช้คำสั่ง yum

yum install httpd-tools

หากคุณมี httpd-tools อยู่แล้ว คุณอาจเพิกเฉยต่อสิ่งนี้

ตอนนี้ เรามาดูกันว่าคำขอ 5,000 รายการทำงานพร้อมกันที่ 500 รายการได้อย่างไร

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        Apache/2.2.15
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        4961 bytes
Concurrency Level:      500
Time taken for tests:   13.389 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Non-2xx responses:      5058
Total transferred:      26094222 bytes
HTML transferred:       25092738 bytes
Requests per second:    373.45 [#/sec] (mean)
Time per request:       1338.866 [ms] (mean)
Time per request:       2.678 [ms] (mean, across all concurrent requests)
Transfer rate:          1903.30 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0   42  20.8     41    1000
Processing:     0  428 2116.5     65   13310
Waiting:        0  416 2117.7     55   13303
Total:         51  470 2121.0    102   13378
Percentage of the requests served within a certain time (ms)
50%    102
66%    117
75%    130
80%    132
90%    149
95%    255
98%  13377
99%  13378
100%  13378 (longest request)
[[email protected] ~]#

อย่างที่คุณเห็น Apache จัดการ 373 คำขอต่อวินาที และใช้เวลาทั้งหมด 13.389 วินาทีในการให้บริการคำขอทั้งหมด

  วิธีบันทึกและแสดงการออกเสียงชื่อของคุณบน LinkedIn

ตอนนี้คุณทราบแล้วว่าการกำหนดค่าเริ่มต้นสามารถตอบสนองคำขอจำนวนมากเหล่านี้ได้ ดังนั้นเมื่อคุณทำการเปลี่ยนแปลงการกำหนดค่าใดๆ คุณสามารถทำการทดสอบอีกครั้งเพื่อเปรียบเทียบผลลัพธ์และเลือกสิ่งที่ดีที่สุด

งินซ์

มาทำการทดสอบสิ่งที่เราทำกับ Apache เพื่อให้คุณเปรียบเทียบได้ว่าตัวใดทำงานได้ดีกว่ากัน

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        nginx/1.10.1
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        3698 bytes
Concurrency Level:      500
Time taken for tests:   0.758 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      19660000 bytes
HTML transferred:       18490000 bytes
Requests per second:    6593.48 [#/sec] (mean)
Time per request:       75.832 [ms] (mean)
Time per request:       0.152 [ms] (mean, across all concurrent requests)
Transfer rate:          25317.93 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    6  11.0      2      53
Processing:     5   19   8.2     17      53
Waiting:        0   18   8.2     16      47
Total:         10   25  17.4     18      79
Percentage of the requests served within a certain time (ms)
50%     18
66%     21
75%     21
80%     22
90%     69
95%     73
98%     75
99%     76
00%     79 (longest request)
[[email protected] ~]#

ว้าว!

คุณเห็นไหม

Nginx จัดการ 6593 คำขอต่อวินาที! ผู้ชนะ

คุณจะเห็นว่าเพียงแค่เปรียบเทียบกับเว็บเซิร์ฟเวอร์สองเซิร์ฟเวอร์ คุณก็จะได้แนวคิดว่าจะเลือกเซิร์ฟเวอร์ใดสำหรับเว็บแอปพลิเคชันของคุณ

การทดสอบข้างต้นใช้ CentOS 6.8, 64 บิต คุณสามารถลองใช้ระบบปฏิบัติการและเว็บเซิร์ฟเวอร์หลายเวอร์ชันร่วมกันเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด

ไม่ชอบ ApacheBench ไม่ว่าด้วยเหตุผลใด? ไม่ต้องกังวล มีโปรแกรมอื่นๆ มากมายที่คุณสามารถใช้โหลด HTTP ได้

ล้อม

ล้อม เป็นยูทิลิตี้ทดสอบโหลด HTTP ที่รองรับบน UNIX คุณสามารถใส่หลาย URL ในไฟล์ข้อความเพื่อโหลดการทดสอบ คุณสามารถติดตั้งการปิดล้อมโดยใช้ yum

# yum install siege

เรียกใช้การทดสอบด้วยคำขอพร้อมกัน 500 รายการเป็นเวลา 5 วินาที

[[email protected] ~]# siege -q -t 5S -c 500 http://localhost/
Lifting the server siege...      done.
Transactions:                       4323 hits
Availability:               100.00 %
Elapsed time:                       4.60 secs
Data transferred:        15.25 MB
Response time:                    0.04 secs
Transaction rate:       939.78 trans/sec
Throughput:                         3.31 MB/sec
Concurrency:                      37.97
Successful transactions:        4323
Failed transactions:                0
Longest transaction:            1.04
Shortest transaction:            0.00
[[email protected] ~]#

เพื่อแบ่งพารามิเตอร์

  Incredibles 2 บน Netflix หรือไม่?

-q – เพื่อเรียกใช้อย่างเงียบ ๆ (ไม่แสดงรายละเอียดคำขอ)

-t – วิ่งเป็นเวลา 5 วินาที

-c – 500 คำขอพร้อมกัน

อย่างที่คุณเห็น ความพร้อมใช้งานคือ 100% และเวลาตอบสนองคือ 0.04 วินาที คุณสามารถปรับแต่งพารามิเตอร์การทดสอบโหลดตามเป้าหมายของคุณ

อาลี

อาลี เป็นเครื่องมือทดสอบโหลดที่ค่อนข้างใหม่สำหรับการวิเคราะห์ตามเวลาจริง รองรับการติดตั้งหลายแพลตฟอร์มรวมถึง Docker

เมื่อติดตั้งแล้ว ให้เรียกใช้งาน ali เพื่อดูรายละเอียดการใช้งาน

[email protected]:~# ali
no target given
Usage:
  ali [flags] <target URL>

Flags:
  -b, --body string         A request body to be sent.
  -B, --body-file string    The path to file whose content will be set as the http request body.
      --debug               Run in debug mode.
  -d, --duration duration   The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s)
  -H, --header strings      A request header to be sent. Can be used multiple times to send multiple headers.
  -k, --keepalive           Use persistent connections. (default true)
  -M, --max-body int        Max bytes to capture from response bodies. Give -1 for no limit. (default -1)
  -m, --method string       An HTTP request method for each request. (default "GET")
  -r, --rate int            The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50)
  -t, --timeout duration    The timeout for each request. 0s means to disable timeouts. (default 30s)
  -v, --version             Print the current version.

Examples:
  ali --duration=10m --rate=100 http://host.xz

Author:
  Ryo Nakao <[email protected]>
[email protected]:~#

ดังที่คุณเห็นด้านบน คุณมีตัวเลือกในการส่งส่วนหัว HTTP, ระยะเวลาทดสอบ, ขีดจำกัดอัตรา, หมดเวลา และอื่นๆ ฉันทำการทดสอบอย่างรวดเร็วกับ admintrick.com Tools และนี่คือผลลัพธ์ที่ออกมา

  วิธีคำนวณการเปลี่ยนแปลงเปอร์เซ็นต์ด้วย Pivot Tables ใน Excel

รายงานเป็นแบบโต้ตอบและให้ข้อมูลเวลาแฝงโดยละเอียด

โกเบนช์

โกเบนช์ เขียนด้วยภาษา Go และยูทิลิตีการทดสอบโหลดอย่างง่ายเพื่อวัดประสิทธิภาพของเว็บเซิร์ฟเวอร์ รองรับผู้ใช้พร้อมกันมากกว่า 20,000 รายซึ่ง ApacheBench ไม่รองรับ

อาปาเช่ เจมิเตอร์

เจมิเตอร์ เป็นหนึ่งในเครื่องมือโอเพ่นซอร์สที่ได้รับความนิยมมากที่สุดในการวัดประสิทธิภาพของเว็บแอปพลิเคชัน JMeter เป็นแอปพลิเคชันที่ใช้จาวาและไม่ใช่แค่เว็บเซิร์ฟเวอร์เท่านั้น แต่คุณสามารถใช้กับ PHP, Java ได้ ASP.net, SOAP, REST เป็นต้น

JMeter มี GUI ที่เป็นมิตรและเวอร์ชันล่าสุด 3.0 ต้องใช้ Java 7 หรือสูงกว่าในการเปิดแอปพลิเคชัน คุณต้องลองใช้ JMeter หากเป้าหมายของคุณคือเพิ่มประสิทธิภาพเว็บแอปพลิเคชัน

เป็นอีกหนึ่งเครื่องมือวัดประสิทธิภาพที่ทันสมัยในการโหลดเว็บเซิร์ฟเวอร์ของคุณและให้รายละเอียดเวลาแฝง คำขอต่อวินาที การถ่ายโอนต่อวินาที ฯลฯ

ด้วย wrk คุณสามารถระบุให้รันการทดสอบโหลดด้วยจำนวนเธรด

ลองมาดูตัวอย่างการเรียกใช้การทดสอบเป็นเวลา 5 นาทีกับผู้ใช้พร้อมกัน 500 รายด้วย 8 เธรด

wrk –t8 –c500 -d300s http://localhost

ออโต้แคนนอน

แรงบันดาลใจจากงาน, ปืนใหญ่อัตโนมัติ เขียนใน Node.js คุณสามารถใช้โปรแกรมผ่าน API หรือยูทิลิตี้แบบสแตนด์อโลน สิ่งที่คุณต้องมีคือติดตั้ง NodeJS เป็นข้อกำหนดเบื้องต้น

คุณสามารถควบคุมจำนวนการเชื่อมต่อ คำขอ ระยะเวลา ผู้ปฏิบัติงาน หมดเวลา อัตราการเชื่อมต่อ และเสนอตัวเลือกมากมายเพื่อเปรียบเทียบเว็บแอปพลิเคชันของคุณ

Curl-loader

curl-loader เขียนด้วยภาษา C เพื่อจำลองการโหลดแอปพลิเคชัน และรองรับ SSL/TLS นอกจากการทดสอบหน้าเว็บแล้ว คุณยังสามารถใช้เครื่องมือโอเพ่นซอร์สนี้เพื่อดำเนินการโหลดบนเซิร์ฟเวอร์ FTP

คุณสามารถสร้างแผนทดสอบที่มี HTTP, HTTPS, FTP และ FTPS ผสมกันในการกำหนดค่าชุดเดียว

httperf

เดอะ httperf เป็นเครื่องมือประสิทธิภาพสูงที่เน้นการวัดประสิทธิภาพในระดับจุลภาคและมหภาค รองรับโปรโตคอล HTTP/1.1 และ SSL

หากคุณมีจำนวนผู้ใช้พร้อมกันตามที่คาดไว้และต้องการทดสอบว่าเว็บเซิร์ฟเวอร์ของคุณสามารถให้บริการตามคำขอได้หรือไม่ คุณสามารถใช้คำสั่งต่อไปนี้

httperf --server localhost --port 80 --num-conns 1000 --rate 100

คำสั่งดังกล่าวจะทดสอบด้วย 100 คำขอต่อวินาทีสำหรับ 1,000 คำขอ HTTP

ซึง

ซึง เป็นเครื่องมือทดสอบความเครียดแบบกระจายหลายโปรโตคอลเพื่อเน้นเซิร์ฟเวอร์ HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL รองรับ HTTP/1.0, HTTP/1.1 และคุกกี้จะได้รับการจัดการโดยอัตโนมัติ

การสร้างรายงานเป็นไปได้ด้วย Tsung

บทสรุป

ฉันหวังว่าเครื่องมือการเปรียบเทียบข้างต้นจะให้แนวคิดเกี่ยวกับประสิทธิภาพเว็บเซิร์ฟเวอร์ของคุณ และตัดสินใจว่าอะไรดีที่สุดสำหรับโครงการของคุณ

ต่อไปอย่าลืมตรวจสอบประสิทธิภาพเว็บไซต์ของคุณ

เรื่องล่าสุด

x