지니워의 일상다반사

nginx.conf core module 옵션 본문

본격 SE업무이야기/nginx

nginx.conf core module 옵션

지니워 2013. 8. 7. 17:23

모든 서버에 적용 가능한 최적화 된 설정. 과연 이런 설정이 존재할까?

개인적으로 이러한 설정은 존재할 수 없다고 생각한다. 모든 것을 아우르기에는 변수가 너무 많고 '최적화'라는 목표에 대한 개인적인 시각차가 존재하기 때문이다.


예를 들어, 작은 쇼핑몰의 서버를 관리하는 SE와 대형 커뮤니티 사이트를 관리하는 SE에게

'서버가 좀 더 원활하게 운영되도록 하려면 어느 정도 업그레이드를 해야 할까요?'

라고 물었을 때, 동일한 대답이 나오기는 어려울 것이다. 작은 쇼핑몰 정도의 규모라면 쿼드코어 혹은 옥타코어 정도만 되어도 서버가 돌아가겠지만 대형 커뮤니티 사이트 같은 경우(뽐뿌, 디시, 일베, 오유, 웃대 등등)에는 (옥타코어 x 2) x 서버50대 ~ 100대 정도가 되어야 서비스가 돌아갈 것이다.

즉, SE의 근무상황이라던가 여러가지 환경변수등에 의해 모든 서버에 적용 가능한 최적화 된 설정을 찾기란 여간 어려운 것이 아니다. 아니 아예 없다고 봐도 무방할 것이다.


오늘 이야기하려는 nginx 또한 마찬가지이다. 서버에 따라 nginx의 설정은 조금씩 차이가 나기 마련이다. test server에 nginx를 설정하면서 공부했던 몇가지 옵션에 대해 적어보겠다. 앞에 누누이 이야기 한 것처럼 모든 서버에 적용 가능한 최적화 된 옵션 설정값은 아니니 그냥 참고만 하면 될 듯 하다.


아래는 여러가지 설정 옵션 중 core module에 해당하는 몇가지를 골라본 것이다.


* worker_processes 2;

 - cpu갯수를 적어주면 된다. test server는 로컬 pc에서 virtualbox를 이용하고 있기 때문에 로컬 pc의 cpu갯수를 적었다.(듀얼코어)


* worker_priority 0;

 - 작업자 우선순위를 명시하는 것이다. 범위값은 -20에서 19. -20이 제일 높고 19가 제일 낮다. 보통 -5 이하로는 쓰지 말라고 nginx에서 권장한다. (헷갈리지 말라고 설명한다. -6, -7, -8 이런식으로 우선순위를 높이지 않는다는 말이다.)보통 듀얼코어정도면 -5정도로 잡고(다른 작업 처리하다가 time_out등등에 걸려서 nginx가 뻗을 확률이 있기때문에 nginx관련 작업을 우선적으로 처리하게끔 한다.)쿼드는 0, 옥타코어 이상도 0으로 설정한다. 앞서 말했지만 절대적인 것은 아니다. 옥타코어나 그 이상의 사양을 가진다고 하더라도 서버가 빠듯하게 돌아가면 우선순위를 높여줄 필요성이 있다.


* worker_cpu_affinity 01 10;

 - 프로세스를 cpu에 할당해주는 거라고 생각하면 된다. 이렇게 할당해주게 되면 각 프로세스가 cpu사이에서 방황(?)하지 않고 바로바로 지정된 cpu로 가서 작업을 하기 때문에 처리속도면에서 도움이 된다. 위의 설정은 첫번째 작업자 프로세스는 두번째 코어에, 두번째 작업자 프로세스는 첫번쨰 코어에 배정한 것이다.


(추가) cpu 하이퍼스레딩과 같은 기술을 사용하는 cpu는 해당사항이 없다. 설정전에 cpu 하이퍼스레딩을 사용하는지 체크하는 것이 중요하다.


지금부터 나오는 세가지는 상황에 따라 설정하기도 하고 안하기도 하는 옵션이지만 알아 둘 필요는 있는 것들이다.


1. worker_rlimit_core 100m;

 - 프로세스당 코어 파일의 크기.

2. worker_rlimit_nofile 1024;

 - 프로세스가 동시에 사용할 수 있는 파일의 수.

3. worker_rlimit_sigpending

 - 호출 프로세스의 사용자 ID당 대기할 수 있는 시그널 수.


그외 잡다한 것들은 아래쪽에 있다.

* master_process on;

 - 이건 따로 명시하지 않아도 default값이 on이다. 여러개의 프로세스로 nginx를 실행하겠다는 것이다. 따로 건들 필요는 없을 듯.

* ssl_engine aesni;

 - ssl을 적용한 사이트라면 위 설정을 해두면 좋다. 현재 서버에서 사용가능한 ssl engine을 명시하여 서버의 부담을 줄이고 사이트의 로딩속도를 높이는 방법. 현재 서버에서 사용가능한 ssl engine을 알아보려면

'openssl engine -t' 를 프롬프트 창에서 실행하면 된다.


간단하게 적을려고 했는데 막상 포스팅하면 시간이 꽤 걸린다. 휴...오늘은 여기까지.


Comments