Nếu bạn đang làm website thì việc kiểm tra hiệu năng và khả năng chịu tải của website là điều hết sức cần thiết. Trong bài viết này, xTraffic.pep.vn sẽ giới thiệu đến với các bạn những công cụ và dịch vụ miễn phí giúp bạn kiểm tra khả năng chịu tải của website (free stress testing tools for websites) bằng cách giả lập nhiều truy vấn cùng lúc.
Kiểm tra khả năng chịu tải của website bằng công cụ Siege
Siege là một công cụ miễn phí chạy trên Linux giúp bạn giả lập các kết nối http đến website mục tiêu mà bạn muốn kiểm tra hiệu năng và khả năng chịu tải.
Để cài đặt và chạy được Siege, bạn phải có 1 VPS hoặc Server chạy hệ điều hành Linux. Trong bài này, xTraffic.pep.vn sẽ hướng dẫn bạn cách cài đặt Siege trên CentOS (nếu bạn chưa có VPS thì có thể tham khảo thêm cách đăng ký và tạo VPS giá rẻ DigitalOcean tại đây)
Đầu tiên, bạn cần phải cài đặt EPEL Repository & REMI Repository theo hướng dẫn tại đây . Sau đó, bạn chạy lệnh sau để cài đặt Siege trên CentOS :
sudo yum install -y siege
Hướng dẫn sử dụng siege
Lệnh siege được sử dụng theo cú pháp sau :
siege <options> [target_url]
- [target_url] là url của website mục tiêu mà bạn muốn test thử
- <options> là các tham số tuỳ chọn giúp chạy siege theo ý muốn của bạn, bao gồm các tham số chính sau :
- –concurrent=NUM (viết tắt là -cNUM ) : (bắt buộc) là số kết nối đồng thời được giả lập.
- –time=NUMs (viết tắt là -tNUMs ) : là thời gian chạy kiểm tra
Ví dụ : lệnh sau đây sẽ giả lập 100 kết nối cùng lúc và chạy kiểm tra trong vòng 60 giây đến url là http://blog-xtraffic.pep.vn/
siege -c100 -t60s http://blog-xtraffic.pep.vn/
Kiểm tra khả năng chịu tải của website bằng công cụ Apache Benchmark (ab)
Apache Benchmark (ab) là một công cụ miễn phí do Apache phát triển, giúp bạn giả lập các kết nối để kiểm tra khả năng chịu tải của website
Thông thường thì công cụ Apache Benchmark (ab) đã được cài mặc định trên CentOS, bạn có thể chạy lệnh sau để kiểm tra xem có Apache Benchmark (ab) trên server của bạn hay chưa :
ab -V
Nếu xuất hiện thông báo như sau thì server/vps của bạn đã có Apache Benchmark (ab) rồi :
[root@ramnode-xtraffic ~]# ab -V 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/ [root@ramnode-xtraffic ~]#
Nếu chưa có thì bạn có thể cài đặt Apache Benchmark (ab) trên CentOS bằng lệnh sau :
sudo yum install -y httpd httpd-tools
Hướng dẫn sử dụng Apache Benchmark (ab)
Apache Benchmark (ab) được sử dụng theo cú pháp sau :
ab [ -A auth-username:password ] [ -c concurrency ] [ -h ] [ -H custom-header ] [ -k ] [ -n requests ] [ -P proxy-auth-username:password ] [ -r ] [ -t timelimit ] [ -v verbosity] [ -w ] [ -X proxy[:port] ] [http[s]://]hostname[:port]/path
- “[http[s]://]hostname[:port]/path” là url (http hoặc https) của website mục tiêu mà bạn muốn kiểm tra
- “[ -A auth-username:password ]” : xác thực truy vấn vào website
- “[ -c concurrency ]” : số kết nối đồng thời được giả lập
- “[ -h ]” : hiện thị thông tin đã sử dụng
- “[ -H custom-header ]” : thêm vào headers của mỗi truy vấn. Ví dụ : “Accept-Encoding: zip/zop;8bit”
- “[ -k ]” : kích hoạt tính năng HTTP KeepAlive, sử dụng nhiều truy vấn với cùng HTTP session
- “[ -n requests ]” : tổng số truy vấn được tạo
- “[ -P proxy-auth-username:password ]” : sử dụng xác thực qua proxy
- “[ -r ]” : tiếp tục thực hiện khi gặp lỗi kết nối
- “[ -t timelimit ]” : thời gian thực hiện kiểm tra (tính bằng giây)
- “[ -v verbosity]” : hiển thị chi tiết quá trình thực hiện. Giá trị từ 2 đến 4
- “[ -w ]” : in kết quả ra HTML tables
- “[ -X proxy[:port] ]” : sử dụng proxy server cho truy vấn
Ví dụ lệnh cơ bản sau sẽ tạo 100 kết nối cùng lúc với 1000 truy vấn trong thời gian tối đa 60 giây đến url http://blog-xtraffic.pep.vn/
ab -c 100 -k -n 1000 -r -t 60 -v 3 http://blog-xtraffic.pep.vn/
Kiểm tra khả năng chịu tải của website bằng công cụ wrk ( Modern HTTP benchmarking tool – https://github.com/wg/wrk )
wrk là một công cụ kiểm tra khả năng chịu tải của website bằng cách giả lập nhiều kết nối đồng thời đến website của bạn.
Bạn có thể cài đặt wrk benchmark trên VPS CentOS bằng cách thực hiện lần lượt các lệnh sau :
sudo yum groupinstall -y 'Development Tools' sudo yum install -y openssl-devel sudo yum install -y git git clone https://github.com/wg/wrk.git cd wrk make sudo cp wrk /usr/local/bin
Sau khi cài đặt xong, bạn có thể kiểm tra xem wrk đã cài đặt thành công hay chưa bằng cách dùng lệnh sau :
wrk -v
Nếu xuất hiện tương tự như sau thì wrk đã được cài đặt thành công trên VPS của bạn :
[root@xtraffic]# wrk -v wrk 3.1.1 [epoll] Copyright (C) 2012 Will Glozer Usage: wrk Options: -c, --connections Connections to keep open -d, --duration Duration of test -t, --threads Number of threads to use -s, --script Load Lua script file -H, --header Add header to request --latency Print latency statistics --timeout Socket/request timeout -v, --version Print version details Numeric arguments may include a SI unit (1k, 1M, 1G) Time arguments may include a time unit (2s, 2m, 2h) [root@xtraffic wrk]#
Để kiểm tra khả năng chịu tải của 1 website, bạn thực hiện lệnh tương tự như sau :
wrk -t10 -c100 -d15s http://blog-xtraffic.pep.vn
Trong đó :
- -t10 : 10 threads
- -c100 : 100 connections
- -d15s : thực hiện trong vòng 15 giây (seconds)
- http://blog-xtraffic.pep.vn : là link website mục tiêu bạn muốn kiểm tra
Kiểm tra khả năng chịu tải của website bằng công cụ boom ( https://github.com/rakyll/boom )
boom là một công cụ kiểm tra khả năng chịu tải của website bằng cách giả lập nhiều kết nối đồng thời đến website của bạn. Công cụ này được viết bằng ngôn ngữ lập trình Go của Google.
Bạn có thể cài đặt boom benchmark trên VPS CentOS bằng cách thực hiện lần lượt các lệnh sau :
sudo yum install -y golang export GOROOT=/usr/lib/golang export GOPATH=/usr/share/gocode export PATH=$PATH:$GOROOT/bin go get github.com/rakyll/boom sudo cp /usr/share/gocode/bin/boom /usr/local/bin
Sau khi cài đặt xong, bạn có thể kiểm tra xem boom đã cài đặt thành công hay chưa bằng cách dùng lệnh sau :
boom
Nếu xuất hiện tương tự như sau thì wrk đã được cài đặt thành công trên VPS của bạn :
[root@xtraffic]# boom Usage: boom [options...] Options: -n Number of requests to run. -c Number of requests to run concurrently. Total number of requests cannot be smaller than the concurency level. -q Rate limit, in seconds (QPS). -o Output type. If none provided, a summary is printed. "csv" is the only supported alternative. Dumps the response metrics in comma-seperated values format. -m HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS. -h Custom HTTP headers, name1:value1;name2:value2. -t Timeout in ms. -A HTTP Accept header. -d HTTP request body. -T Content-type, defaults to "text/html". -a Basic authentication, username:password. -x HTTP Proxy address as host:port. -allow-insecure Allow bad/expired TLS/SSL certificates. -disable-compression Disable compression. -disable-keepalive Disable keep-alive, prevents re-use of TCP connections between different HTTP requests. -cpus Number of used cpu cores. (default for current machine is 1 cores) [root@xtraffic]#
Để kiểm tra khả năng chịu tải của 1 website, bạn thực hiện lệnh tương tự như sau :
boom -n 1000 -c 10 -allow-insecure http://blog-xtraffic.pep.vn
Trong đó :
- -n 1000 : 1000 truy vấn (requests)
- -c 10 : 10 kết nối cùng lúc (Number of requests to run concurrently). Lưu ý là con số của “-c” không được lớn hơn con số của “-n”
- -allow-insecure : Allow bad/expired TLS/SSL certificates
- http://blog-xtraffic.pep.vn : là link website mục tiêu bạn muốn kiểm tra
Kiểm tra khả năng chịu tải của website bằng công cụ SlowHTTPTest
SlowHTTPTest là một công cụ miễn phí chạy trên nền tảng Linux. Đây là một công cụ được mô tả là giả lập tấn công DDOS (Application layer DDoS attack) nên bạn cần sử dụng nó cẩn thận và đúng mục đích. Bạn có thể dùng công cụ này để vừa kiểm tra khả năng chịu tải của website hoặc khả năng chống đỡ của website trước các cuộc tấn công DDOS có quy mô nhỏ và đơn giản
Để cài đặt SlowHTTPTest trên CentOS, bạn chỉ cần thực hiện lệnh sau :
sudo yum install -y slowhttptest
Hướng dẫn sử dụng SlowHTTPTest
SlowHTTPTest thực hiện theo cú pháp sau :
slowhttptest [options] -u http://host[:port]/path/
[options] bao gồm các tuỳ chọn cơ bản sau :
-c number of connections : số kết nối, giá trị tối đa là 65539
-g : tạo dữ liệu thống kê theo định dạng CSV và HTML
-o file : xuất dữ liệu thống kê ra file có đường dẫn tuỳ chọn
-r connections per second : số kết nối trong 1 giây
-H, B, R or X : kiểu tấn công DDOS
-t verb : bao gồm giá trị FAKEVERB, GET, POST
-v level : mức độ thống kê chi tiết, có giá trị từ 0 đến 4
-a start | start value of ranges-specifier for range header test |
-b bytes | limit of range-specifier for range header test |
-c number of connections | limited to 65539 |
-d proxy host:port | for directing all traffic through web proxy |
-e proxy host:port | for directing only probe traffic through web proxy |
-H, B, R or X | specify to slow down in headers section or in message body, -R enables range test, -X enables slow read test |
-g | generate statistics in CSV and HTML formats, pattern is slow_xxx.csv/html, where xxx is the time and date |
-i seconds | interval between follow up data in seconds, per connection |
-k pipeline factor | number of times to repeat the request in the same connection for slow read test if server supports HTTP pipe-lining. |
-l seconds | test duration in seconds |
-n seconds | interval between read operations from receive buffer |
-o file | custom output file path and/or name, effective if -g is specified |
-p seconds | timeout to wait for HTTP response on probe connection, after which server is considered inaccessible |
-r connections per second | connection rate |
-s bytes | value of Content-Length header, if -B specified |
-t verb | custom verb to use |
-u URL | target URL, the same format you type in browser, e.g https://host[:port]/ |
-v level | verbosity level of log 0-4 |
-w bytes | start of range the advertised window size would be picked from |
-x bytes | max length of follow up data |
-y bytes | end of range the advertised window size would be picked from |
-z bytes | bytes to read from receive buffer with single read() operation |
Ví dụ lệnh tấn công DDOS theo kiểu slow message body :
slowhttptest -c 1000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://example.com/loginform.php -x 10 -p 3
Ví dụ lệnh tấn công DDOS theo kiểu slowloris :
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u https://example.com/index.php -x 24 -p 3
Ví dụ lệnh tấn công DDOS theo kiểu slow read mode thông qua proxy x.x.x.x:8080 :
slowhttptest -c 1000 -X -r 1000 -w 10 -y 20 -n 5 -z 32 -u http://example.com/somebigresource -p 5 -l 350 -e x.x.x.x:8080
Kiểm tra khả năng chịu tải của website với dịch vụ miễn phí Loadimpact
Loadimpact cũng là một dịch vụ miễn phí rất tốt giúp bạn kiểm tra khả năng chịu tải của website. Bạn không cần phải có VPS hoặc Server để sử dụng, tất cả các truy vấn đều được giả lập trên các server Loadimpact nằm nhiều nơi trên thế giới. Bạn chỉ cần vào website của Loadimpact tại đây và nhập url của website bạn cần kiểm tra, mọi thứ đều được thực hiện tự động và được báo cáo chi tiết.