# cdecl/asb - Http benchmarking and load test tool for windows, posix
- wg/wrk (Modern HTTP benchmarking tool)과 기능이 비슷한, Windows 버전으로 만들게 된 커맨드 라인 툴.
- boost::asio 와 asio 에서 지원하는 ssl(openssl)을 이용하여 구현.
- VC++ 2013 환경에서 개발하고, 라이브러리 패키지 NuGet으로 관리.
- Posix 환경은 g++ (4.8 이상, -std=c++11), boost 라이브러리 및 libssl-dev (openssl) 패키지 설치
# 테스트 결과
- 테스트 환경 ; Laptop Intel i5(4세대), 4 Core, 8G RAM, Windows 8.1 64bit
- 성능 좋은 결과가 나오기 위해서는 대체적으로 Core 1/2 개수의 Thread에, Core 10배수 정도의 Connection이 무난해 보임 (로컬 환경에서 테스트 할때)
- 성능 좋은 결과가 나오기 위해서는 대체적으로 Core 개수의 Thread에, Core 20배수 정도의 Connection이 무난해 보임
asb -d 10 -t 2 -c 40 http://localhost/index.html
> Start and Running 10s (2015-03-18.17:36:10)
http://localhost/index.html
40 connections and 2 Threads
> Duration : 10000ms
Latency : 0.02ms
Requests : 426149
Response : 426109
Transfer : 147.11MB
> Per seconds
Requests/sec : 42610.90
Transfer/sec : 14.71MB
> Response Status
HTTP/1.1 200 : 426109
# Windows 에서 최대 Connection 만들기
- OS의 소켓 최대 포트 번호를 늘림 (초기값 : 1500, 변경: 50000)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 의 MaxUserPort 값 변경
> https://support.microsoft.com/ko-kr/kb/196271?wa=wsignin1.0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
편집 메뉴에서 새로 만들기를 클릭하고 다음 레지스트리 항목을 추가합니다.
값 이름: MaxUserPort
값 형식: DWORD
값 데이터: 65534
유효 범위: 5000-65534(십진수)
기본값: 0x1388(십진수 5000)
설명: 이 매개 변수는 프로그램이 시스템에서 사용 가능한 사용자 포트를 요청할 때 사용되는 최대 포트 번호를 제어합니다. 일반적으로 수명이 짧은 임시(ephemeral) 포트에는 1024에서 5000 사이의 값이 할당됩니다. 보안 공지 MS08-037 릴리스 후 Windows Server 2003의 동작이 Windows Server 2008 및 Windows Vista의 동작과 보다 근접하게 일치하도록 변경되었습니다. Microsoft 보안 공지 MS08-037에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.
- IIS의 응용프로그램의 큐 길이를 늘림 (초기값 : 1000, 변경: 3000), Worker Thread 개수 늘림 (초기값: 1, 변경: 2)
- IIS의 경우, 경로를 http://localhost/ 이렇게 줘서 Default 파일을 찾는 과정이 생각보다 느림 (20% 성능)
- 현재 조건(랩탑)에서는 최대 26,000 연결 정도 까지 가능하고 27,000 연결 이상 테스트 하면 문제가 발생함 (리소스가 부족한 것으로 추측)
- http://sockettools.com/kb/maximum-socket-connections/
'Dev > C++' 카테고리의 다른 글
멀티쓰레드 최적화 힙 메모리 할당기 - tcmalloc. jemalloc (1) | 2015.04.06 |
---|---|
cdecl/asb 개발 중.. (0) | 2015.04.01 |
Catch (A modern, C++-native, header-only, framework for unit-tests, TDD and BDD) (0) | 2015.02.26 |
C++ REST SDK (casablanca) 간단 샘플 (0) | 2015.02.17 |
[C++11] Variadic template (0) | 2014.11.02 |