curl에서 빨리 HTTP 벤치 마크

5623 단어 curl

왜 curl을 사용하는가



HTTP 벤치마크라고 하면 ab, JMeter, wrk 등 전용의 툴이 있습니다만, 왜 굳이 단순한 HTTP 클라이언트인 curl 를 사용하는 것인가.
이것은 curl이 일종의 공통 언어가 되어 있기 때문입니다.
  • WebAPI 요청 사양으로 curl 명령 제안
  • cURL as DSL은 무엇 이었습니까? 또는 너무 세밀하게 전달되지 않는 cURL as DSL.

  • 또한 일부 도구는 HTTP 요청을 curl 명령으로 복사하는 기능을 구현합니다.
    예를 들어 Google 크롬에서는 Developer Tools에서 Network 탭에서 모든 요청을 curl 명령으로 복사할 수 있습니다.



    또한 mitmproxy에도 이러한 기능이있는 것 같습니다. (아직 스스로 시도하지 않았지만)
  • mitmproxy 0.16에는 요청 내용을 curl 명령과 파이썬 코드로 변환 할 수있는 편리한 사람이있었습니다.

  • 즉, PC 브라우저에서의 요청이나 스마트폰 앱 등에서의 요청도 curl 명령으로 쉽게 얻을 수 있습니다.
    스마트폰 앱에서 구체적으로 어떻게 할 것인지는 아래의 기사를 참조하십시오.
  • 모바일 앱 개발자를 위한 mitmproxy 시작

  • 또한 이러한 방식으로 curl 명령을 복사 할 수 있다는 것은 HTTP 헤더 등을 포함하여 거의 완전한 HTTP 요청을 얻을 수 있다는 것입니다.
    예를 들어 Authorization 헤더나 세션 ID의 쿠키가 필요한 경우에, 그 값을 일일이 조사하거나, 한층 더 툴 마다 어떻게 건네줄까 하는 것을 조사할 필요가 없어집니다.

    curl로 응답 시간 얻기



    먼저 curl 명령을 준비합니다.
    이번에는 Google 블로그의 톱 페이지를 Google Chrome에서 가져 왔습니다.
    (쿠키는 깎고 있습니다)
    $ curl 'http://blog.yuyat.jp/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Connection: keep-alive' --compressed
    

    이대로라면 응답 바디가 출력될 뿐입니다.
    이 명령의 끝에 다음을 추가합니다.
    -s -o /dev/null -w  "%{time_starttransfer}\n"
    
    -s 는 요청 중 진행 표시를 억제하기 때문에 -o 는 응답 본문을 /dev/null 에 버리기 때문입니다.
    그리고 중요한 것은 -w 입니다.
    이것은 다양한 값을 지정한 포맷으로 출력하기 위한 것으로, 여기에서는 응답 타임으로서 time_starttransfer 를 지정해 보았습니다.
    (응답 시간으로 이것이 적절한지, 솔직히 너무 자신이 없기 때문에 츳코미 기다리고 있습니다)
    이 옵션으로 얻을 수 있는 것은 다양하기 때문에, 예를 들면 리스폰스 타임 뿐만이 아니라 리스폰스의 모두가 돌아갈 때까지의 시간을 계측하고 싶다고 하는 경우 등은 보다 적절한 값을 선택해 주세요.
  • -w, --write-out

  • 이것을 실행하면 다음과 같이 출력됩니다.
    $ curl 'http://blog.yuyat.jp/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Connection: keep-alive' --compressed -o /dev/null -w  "%{time_starttransfer}\n" -s
    0.582
    

    응답 시간이 0.582초임을 알았습니다.

    응용 프로그램: 응답 시간의 백분위수 값 얻기



    한 번만 요청하면 적절한 벤치마크라고 할 수 없습니다.
    여기서는 100회 요청을 하여 백분위수 값을 얻으십시오.
    (더 많은 것이 좋을지도 모르지만, 어디까지나 이 기사는 빨리 할 뿐이므로 이 근처에서)

    졸작 ntimes라는 명령를 사용하면 쉽게 할 수 있습니다.

    이전 명령의 시작 부분에 ntimes 100 --를 추가하기 만하면됩니다.
    $ ntimes 100 -- curl 'http://blog.yuyat.jp/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Connection: keep-alive' --compressed -o /dev/null -w  "%{time_starttransfer}\n" -s
    0.626
    0.821
    0.710
    0.572
    0.563
    0.556
    (以下略)
    
    ntimes 100 -p 4 -- 와 같이 -p 옵션을 사용하면 병렬 수를 지정할 수도 있습니다.

    이와 같이, 1회에서는 0.582초에서도, 반복 실행해 보면 폭이 있는 것을 알 수 있습니다.
    그래서 이것의 백분위수 값을 얻으십시오.
    이것 또한 졸작의 percentile이라는 명령 를 사용합니다.
    방금 명령을 파이프로이 percentile에 연결하면됩니다.
    $ ntimes 100 -- curl 'http://blog.yuyat.jp/' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,ja;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Connection: keep-alive' --compressed -o /dev/null -w  "%{time_starttransfer}\n" -s | percentile
    50%:    0.575
    66%:    0.655
    75%:    0.715
    80%:    0.734
    90%:    0.929
    95%:    1.167
    98%:    1.472
    99%:    1.937
    100%:   2.613
    

    좋은 웹페이지 즐겨찾기