[오류] Mac OSX 에서 Apache bench 사용시 apr_socket_recv: Connection reset by peer (54) 오류 해결 방법
아파치 웹서버에 포함돼 있는 Apache bench 는 HTTP에 대한 성능을 간단히 테스트 할 수 있는 도구이다.
그런데 맥(mac) OSX 에서 Apache bench 사용시 "apr_socket_recv: Connection reset by peer (54)" 라는 타임아웃 오류가 발생하는 경우가 있다. 아마도 Lion 이상 버전에서 발생하는 것 같다.
이런 경우 ab 명령어를 patch를 해야 한다. 패치하는 방법은 아래와 같다.
- apache 를 새로 다운로드 받는다. (현재 최신 버전은 2.4.3)
- 압축 해제 및 패치 적용
- httpd-2.4.3 폴더에 압축을 푼 후 httpd-2.4.3 폴더로 이동한다.
- httpd-2.4.3 폴더 안에 패치파일(https://www.rtfm.ro/download/patches/ab.patch) 을 다운 받는다.
- $ patch -p0 < ab.patch
- $ ./configure
- $ make
- 기존 ab 와 교체
- $ which ab
- /usr/sbin/ab
- $ sudo cp /usr/sbin/ab /usr/sbin/_ab
- $ sudo cp support/ab /usr/sbin/ab
컴파일을 하기 위해서는 Xcode를 설치하고 "Preferences... > Downloads > Command Line Tools" install 해야 한다.
하지만 Command Line Tools 를 인스톨 해도 컴파일이 안되고 "C compiler cannot create executables" 에러가 나는 경우가 있는데 그 이유는 실제 컴파일 하기 위해 사용하는 "cc" 파일 위치와 Xcode 를 통해 설치한 "cc" 파일 위치가 달라서 그렇다. 그럴땐 아래와 같은 방식으로 심볼릭 링크를 걸어주면 된다.
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain
패치가 끝났으면 아래와 같이 "ab" 명령을 사용해 보자
$ ab -n 1000 -c 100 http://google.com/
위 명령은 http://google.com/ 에 대해서 동시접속 100명이 접속해서 1000번의 요청을 했을 때 결과를 리포팅 해주는 명령이다.