- 특정 웹사이트의 웹서버 단에서 처리되는 html 및 image 파일 호출하는 시나리오 작성

- Linux (CentOS), CPU 1 Core, 2GB Memory

- Apache 웹서버 2.2.26

- NginX 1.4.5

- 결과의 신뢰성을 높이기 위하여

  1) 동일 조건으로 각각 7회씩 부하 (2차 테스트 때는 각각 5회)

  2) 모든 테스트 이후에는 서버 리부팅하여 관련 자원 초기화

 

< 40분(2400초) 동안, 3초에 2명씩 Ramp-Up 하며 부하 투입 >

  • Apache 웹서버 : MaxClients 5120
  • Nginx : worker_processes 1, worker_connections 5120
부하시간 Ramp-Up 횟수 Apache 웹서버 NginX
평균 TPS Peak
TPS
요청 수 오류 수 사용
메모리(KB)
평균 TPS Peak
TPS
요청 수 오류 수 사용
메모리(KB)
2400초 2명 / 3초 1차 137.4 301.0 327,792 148 302,188 138.8 389.0 330,746 43 157,292
2400초 2명 / 3초 2차 138.4 366.5 330,221 301 303,744 138.1 389.0 329,730 79 155,440
2400초 2명 / 3초 3차 139.0 342.5 331,189 16 324,476 138.1 366.5 329,252 57 156,300
2400초 2명 / 3초 4차 137.9 360.0 328,294 557 322,292 139.1 364.5 331,298 289 161,772
2400초 2명 / 3초 5차 139.3 335.5 332,177 161 323,644 138.0 357.5 328,906 60 157,548
2400초 2명 / 3초 6차 137.0 396.0 326,818 767 328,276 138.6 388.0 330,706 93 156,184
2400초 2명 / 3초 7차 137.8 315.5 328,624 13 302,436 138.9 418.0 331,346 116 157,936

 

TPS 의 경우 크게 차이는 느끼지 못하겠습니다.

그러나 동일 request 처리를 위하여 OS 상에서 소모하고 있는 메모리의 량은 NginX 가 절반 수준입니다.

위의 <사용 메모리(KB)> 라고 표현한 부분을 다시 한번 설명드리면,

최초 프로세스 기동시점 기준으로 최종 부하 투하 시점의 메모리 사용량, 즉 델타값입니다.

 

제가 테스트 한 서버 (메모리 2G) 기준으로, 평균적으로 

  • Apache 웹서버는 기동 후 부하를 전혀 넣지 않은 상태에서 1.7G 정도 여유 메모리가 있었고
    최종 부하 시점에는 대략 1.42G 정도 남았습니다. 
  • Nginx 는 기동 후 부하를 전혀 넣지 않은 상태에서 1.73G 정도 여유 메모리가 있었고
    최종 부하 시점에는 대략 1.58G 정도 남았습니다.

즉, 테스트 결과에는 반영되어 있지 않지만 전혀 부하가 없는 상태의 기동 시점에서도

NginX 가 메모리를 약 0.3G 정도 덜 사용한다는 것입니다.

 

이제 CPU 사용률 올라갑니다.

1) Apache 웹서버

2) NginX

그래프를 봐서는 언뜻 비교가 어려워 보이기도 하는데요,

사실 Apache 는 테스트 시작 31분 정도부터 간간히 CPU 100% 를 치게 되었고,

34분 정도부터는 그냥 계속 100% 가 되었습니다.

그러나 NginX 는 테스트 마지막에 부하가 최고에 달할 때에도

CPU 90%~100% 사이에 머물면서 아주 가끔 100% 를 쳤을 뿐입니다.

메모리에 이어 CPU 도 NginX 의 승리입니다.

 

마지막으로 몽상가님이 요청하신 TPS 추이를 올려드립니다.

모든 테스트에 대해 다 올리기는 뭐해서 각각 1,3,5번째 테스트에 대한, 부하툴에서 캡춰한 그래프입니다.

1) Apache 웹서버

2) NginX

 

그래프들이 어떠한 의미를 주는지 각자 해석할 수 있는 기회를 드리겠습니다.

 

폐업을 고민하기도 했던 얼렁뚱땅 연구소는 Apache 웹세버와 Nginx 의 진실을 밝히기 위하여 

다시 한번 달려볼 것을 맹세합니다.