curl에서 빨리 HTTP 벤치 마크
5623 단어 curl
왜 curl을 사용하는가
HTTP 벤치마크라고 하면 ab, JMeter, wrk 등 전용의 툴이 있습니다만, 왜 굳이 단순한 HTTP 클라이언트인 curl 를 사용하는 것인가.
이것은 curl이 일종의 공통 언어가 되어 있기 때문입니다.
또한 일부 도구는 HTTP 요청을 curl 명령으로 복사하는 기능을 구현합니다.
예를 들어 Google 크롬에서는 Developer Tools에서 Network 탭에서 모든 요청을 curl 명령으로 복사할 수 있습니다.
또한 mitmproxy에도 이러한 기능이있는 것 같습니다. (아직 스스로 시도하지 않았지만)
즉, PC 브라우저에서의 요청이나 스마트폰 앱 등에서의 요청도 curl 명령으로 쉽게 얻을 수 있습니다.
스마트폰 앱에서 구체적으로 어떻게 할 것인지는 아래의 기사를 참조하십시오.
또한 이러한 방식으로 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
를 지정해 보았습니다.(응답 시간으로 이것이 적절한지, 솔직히 너무 자신이 없기 때문에 츳코미 기다리고 있습니다)
이 옵션으로 얻을 수 있는 것은 다양하기 때문에, 예를 들면 리스폰스 타임 뿐만이 아니라 리스폰스의 모두가 돌아갈 때까지의 시간을 계측하고 싶다고 하는 경우 등은 보다 적절한 값을 선택해 주세요.
이것을 실행하면 다음과 같이 출력됩니다.
$ 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
Reference
이 문제에 관하여(curl에서 빨리 HTTP 벤치 마크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuya_takeyama/items/baf48a3f643e743a46b4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)