웹 서버 성능 벤치마크를 수행하는 방법은 무엇입니까?

웹사이트의 평균 응답 시간을 알고 계십니까? 사이트에서 처리할 수 있는 동시 사용자 수를 알고 계십니까?

부하 테스트는 웹 애플리케이션이 웹 사이트 용량을 파악하는 데 필수적입니다. 웹 서버를 선택하려는 경우 가장 먼저 해야 할 일 중 하나는 로드 테스트를 수행하고 어떤 것이 잘 작동하는지 확인하는 것입니다.

벤치마킹은 결정하는 데 도움이 될 수 있습니다.

  • 가장 잘 작동하는 웹 서버
  • x 요청 수를 처리하는 데 필요한 서버 수
  • 최상의 결과를 제공하는 구성
  • 성능이 더 좋은 기술 스택
  • 사이트가 느려지거나 고장날 때

스트레스 테스트를 수행할 수 있는 몇 가지 온라인 도구가 있습니다. 그러나 사내 솔루션을 찾고 있거나 웹 서버 성능만 벤치마킹하려는 경우에는 ApacheBench와 아래 나열된 도구 중 일부를 사용할 수 있습니다.

에서 호스팅되는 Apache & Nginx 웹 서버를 사용했습니다. 디지털오션 그것을 테스트합니다.

아파치벤치

아파치벤치 (ab)는 모든 웹 서버에서 작동하는 오픈 소스 명령줄 프로그램입니다. 이 글에서는 이 작은 프로그램을 설치하고 로드 테스트를 수행하여 결과를 벤치마킹하는 방법을 설명합니다.

아파치

yum 명령을 사용하여 ApacheBench를 설치해 보겠습니다.

yum install httpd-tools

이미 httpd-tools가 있는 경우 이를 무시해도 됩니다.

이제 500개의 동시성으로 5000개의 요청에 대해 어떻게 수행되는지 살펴보겠습니다.

[[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초가 걸렸습니다.

  이메일 서명, 모바일 및 개인용 컴퓨터를 설정하는 방법

이제 기본 구성이 이렇게 많은 요청을 처리할 수 있으므로 구성을 변경할 때 테스트를 다시 수행하여 결과를 비교하고 최상의 것을 선택할 수 있습니다.

엔진엑스

어느 것이 더 나은지 비교할 수 있도록 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비트에서 진행되었습니다. 최적의 결과를 위해 OS 및 웹 서버 버전의 여러 조합을 시도할 수 있습니다.

어떤 이유로든 ApacheBench가 마음에 들지 않습니까? 걱정하지 마세요. HTTP 로드를 수행하는 데 사용할 수 있는 다른 방법이 많이 있습니다.

포위

포위 UNIX에서 지원되는 HTTP 부하 테스트 유틸리티입니다. 텍스트 파일에 여러 URL을 입력하여 테스트를 로드할 수 있습니다. yum을 사용하여 siege를 설치할 수 있습니다.

# yum install siege

5초 동안 500개의 동시 요청으로 테스트를 실행해 보겠습니다.

[[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] ~]#

매개변수를 분해합니다.

  Clash of Clans를 재설정하지 않고 다시 시작하는 방법

-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 헤더, 테스트 기간, 속도 제한, 제한 시간 등을 보낼 수 있는 옵션이 있습니다. koreantech.org Tools에서 빠른 테스트를 수행했으며 출력은 다음과 같습니다.

보고서는 대화식이며 자세한 대기 시간 정보를 제공합니다.

  Chrome에서 툴바를 표시하는 방법

고벤치

고벤치 Go 언어와 간단한 부하 테스트 유틸리티로 작성되어 웹 서버 성능을 벤치마킹합니다. ApacheBench가 지원하지 않는 20,000명 이상의 동시 사용자를 지원합니다.

아파치 J미터

J미터 웹 애플리케이션 성능을 측정하는 가장 인기 있는 오픈 소스 도구 중 하나입니다. JMeter는 Java 기반 응용 프로그램이며 웹 서버일 뿐만 아니라 PHP, Java에 대해서도 사용할 수 있습니다. ASP.net, SOAP, REST 등

JMeter는 친숙한 GUI를 제공하며 최신 버전 3.0에서 응용 프로그램을 시작하려면 Java 7 이상이 필요합니다. 목표가 웹 애플리케이션 성능을 최적화하는 것이라면 JMeter를 사용해 봐야 합니다.

작업

작업 웹 서버에 부하를 가하고 대기 시간, 초당 요청, 초당 전송 등 세부 정보를 제공하는 또 다른 최신 성능 측정 도구입니다.

wrk를 사용하면 여러 스레드로 부하 테스트를 실행하도록 지정할 수 있습니다.

500명의 동시 사용자와 8개의 스레드로 5분 동안 테스트를 실행하는 예를 들어 보겠습니다.

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

기관포

일에서 영감을 받아, 기관포 Node.js로 작성되었습니다. API 또는 독립 실행형 유틸리티를 통해 프로그래밍 방식으로 사용할 수 있습니다. 필수 구성 요소로 설치된 NodeJS만 있으면 됩니다.

여러 연결, 요청, 기간, 작업자, 시간 제한, 연결 속도를 제어하고 웹 애플리케이션을 벤치마킹할 수 있는 수많은 옵션을 제공할 수 있습니다.

컬 로더

컬 로더 애플리케이션 부하를 시뮬레이션하기 위해 C로 작성되었으며 SSL/TLS를 지원합니다. 웹 페이지 테스트와 함께 이 오픈 소스 도구를 사용하여 FTP 서버에서 로드를 수행할 수도 있습니다.

단일 배치 구성에서 HTTP, HTTPS, FTP 및 FTPS가 혼합된 테스트 계획을 생성할 수 있습니다.

httperf

그만큼 httperf 미시적 및 거시적 수준의 벤치마크에 중점을 둔 고성능 도구입니다. HTTP/1.1 및 SSL 프로토콜을 지원합니다.

예상되는 동시 사용자 수가 있고 웹 서버가 여러 요청을 처리할 수 있는지 테스트하려는 경우 다음 명령을 사용할 수 있습니다.

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

위의 명령은 1000개의 HTTP 요청에 대해 초당 100개의 요청으로 테스트합니다.

HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL 서버에 스트레스를 주는 다중 프로토콜 분산 스트레스 테스트 도구입니다. HTTP/1.0, HTTP/1.1을 지원하며 쿠키는 자동으로 처리됩니다.

Tsung을 사용하면 보고서를 생성할 수 있습니다.

결론

위의 벤치마킹 도구가 웹 서버 성능에 대한 아이디어를 제공하고 프로젝트에 가장 적합한 것을 결정하기를 바랍니다.

다음으로 웹 사이트 성능을 모니터링하는 것을 잊지 마십시오.