ab -n 100 -c 100 http://127.0.0.1:3000/
예를 들어 위처럼 실행을 하면 http://127.0.0.1:3000/에 대해서 동시접속 100으로 100개의 요청을 보내서 테스트결과를 리포팅하게 되어 있습니다. 간단히 성능 테스트를 해볼 때 유용한데 잘 쓰고 있던 중에 OSX를 Lion으로 업그래이드 이후에 제대로 동작하지 않았습니다.
위 화면처럼 정상적인 웹서버에 ab를 돌렸는데 apr_socket_recv: Connection reset by peer (54) 오류가 발생하며 제대로 벤치마킹이 동작하지 않았습니다. 정확한 이유는 확인하지 못했는데 아마 OS의 소켓류의 어떤 제한때문에 발생하는게 아닐까 여러가지 글들을 찾아보면서 추측해 볼 따름입니다.(왜냐하면 로컬이 아닌 외부로 ab를 돌리면 정상적으로 동작합니다.)
어쨌든 이 문제는 ab를 패치함으로써 해결할 수 있습니다.(그런 면에서는 ab의 어떤 버그 때문인지도 모르겠습니다.)
새로 Apache를 다운로드 받습니다. (현재 최신 버전은2.2.19입니다.) 다운받은 apache 파일의 압축을 풀어줍니다. 여기서는 httpd-2.2.19폴더에 압축을 풀었습니다. 이 아파치 파일을 이용해서 컴파일후 설치를 하면 ab도 설치되지만 그 전에 ab를 패치해 주어야 합니다.
$ cd httpd-2.2.19
httpd-2.2.19 $ wget https://www.rtfm.ro/download/patches/ab.patch --no-check-certificate
--2011-08-18 01:36:21-- https://www.rtfm.ro/download/patches/ab.patch
Resolving www.rtfm.ro... 188.240.88.9
Connecting to www.rtfm.ro|188.240.88.9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1811 (1.8K) [text/x-diff]
Saving to: `ab.patch.1'
100%[===================================================================================================>] 1,811 --.-K/s in 0s
2011-08-18 01:36:23 (25.8 MB/s) - `ab.patch.1' saved [1811/1811]
httpd-2.2.19 $
https://www.rtfm.ro/download/patches/ab.patch에서 httpd-2.2.19 디렉토리안에 ap.patch파일을 다운로드 받습니다. 여기서는 wget을 이용해서 다운로드 받았습니다.
httpd-2.2.19 $ patch -p0 <./ab.patch
patching file support/ab.c
Hunk #1 succeeded at 683 (offset 13 lines).
Hunk #2 FAILED at 1696.
Hunk #3 succeeded at 1790 with fuzz 1 (offset 23 lines).
1 out of 3 hunks FAILED -- saving rejects to file support/ab.c.rej
httpd-2.2.19 $
patch -p0 <./ab.patch 명령어를 실행해서 ab.patch파일의 패치내용을 적용시킵니다. 결과 메시지에 일부가 Failed로 나타나지만 큰 상관은 없습니다.
httpd-2.2.19 $ ./configure --enable-module=most --enable-shared=max
checking for chosen layout... Apache
checking for working mkdir -p... yes
.............................
httpd-2.2.19 $ make
Making all in srclib
Making all in pcre
/usr/share/apr-1/build-1/libtool --silent --mode=compile gcc -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -I/Users/outsider/Downloads/httpd-2.2.19/srclib/pcre
.......................
이제 아파치를 컴파일 합니다. ./configure 명령어로 설정을 한 후에 make명령어로 컴파일 합니다.
httpd-2.2.19 $ sudo cp ./support/ab /usr/local/apache2/bin/ab
전체 Apache를 컴파일 했지만 여기서 필요한 것은 ab파일 뿐이므로 support디렉토리 아래 있는 ab파일을 이미 설치되어 있던 apache의 ab를 덮어씁니다.
이제 다시 ab 벤치마킹을 돌리면 정상적으로 테스트가 되는 것을 볼 수 있습니다. OSX에서는 /usr/sbin/ab를 사용하게 되는데 여기서는 /usr/local/apache2/bin/ab에 복사를 했기 때문에 이 ab파일을 사용했습니다.
Comments