[Nginx] Worker Process

반응형

이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다.

10. Worker Process

nginx에서 실제로 작업을 수행하고 response를 return 하는 process는 master prcoess가 아닌 worker process입니다.

저의 nginx는 default 값으로 1개의 master process와 1개의 worker process를 사용하고 있습니다.

image.png

이번글에서는 이 중 worker process에 대해 알아보고 조작하는 방법에 대해 살펴보도록 하겠습니다.

10-1) change worker process number

worker process의 숫자를 변경하고 싶다면 nginx.conf를 변경하면 됩니다.

아래와 같이 nginx.conf를 열어 가장 상위에 worker_processes 변수를 추가하고 저장하면 됩니다.

worker_processes 2;

events {}

http {
        include mime.types;

        server {
                listen 80;
                server_name 13.209.87.130;
                root /sites/demo;
        }
}

이후 nginx를 reload 하면 아래와 같이 worker process의 갯수가 변경된 것을 확인 할 수 있습니다.

image.png

worker process를 변경할때 주의해야할 점은, 성능향상을 목적으로 단순히 worker process의 숫자를 늘리는 것은 전혀 도움이 되지 않는다는 점 입니다.

이전글 https://velog.io/@minholee_93/Nginx-Overview-Install 에서 살펴보았듯이 nginx의 process는 모든 request를 asynchronously 하게 처리합니다.

image.png

따라서 하나의 nginx worker process 만으로도 nginx가 설치된 hardware의 성능을 최대로 사용하기 때문에, hardware의 성능향상 없이 nginx의 workerprocess를 늘리는 것은 전혀 효과가 없으며 오히려 성능이 하락할 여지가 있습니다.

결론적으로 nginx server에서 이상적인 worker process의 갯수는 본인 server의 core의 갯수입니다. 각 core는 서로 process를 공유하지 않으므로 모든 core당 1개의 worker process를 사용하면 전체 server의 resource를 최대로 사용하는 셈입니다.

각자 아래의 명령어를 통해 core의 갯수를 확인해 봅시다 😎!

lscpu

image.png

제 nginx server는 1개의 cpu를 가지고 있으므로...😅 가장 이상적인 worker process의 갯수는 1개입니다.

만약 nginx에서 알아서 core의 갯수만큼 worker process를 사용하게 setting 하고 싶다면 아래와 같이 nginx.conf를 변경하면 됩니다.

worker_processes auto;

events {}

http {
        include mime.types;

        server {
                listen 80;
                server_name 13.209.87.130;
                root /sites/demo;
        }
}

auto로 저장하고 다시확인하면 아래와 같이 제 core에 맞게 1개의 worker process를 구동하고 있는것을 확인할 수 있습니다.

image.png

10-2) change worker connection

각 worker process 별 최대 허용 connection의 갯수 또한 setting 할 수 있습니다.

모든 server는 각 core별로 동일한 file을 한번에 open 할 수 있는 number의 limit이 정해져 있습니다.

max file open number

ulimit -n

제 server의 limit number는 1024입니다.

image.png

core의 max가 1024이므로 nginx의 max 값도 1024로 setting 해주는 것이 가장 이상적입니다. worker connection 변수 값은 event content 안에 작성합니다.

worker_processes auto;

events {
    worker_connections 1024;
}

http {
        include mime.types;

        server {
                listen 80;
                server_name 13.209.87.130;
                root /sites/demo;
        }
}

위와 같이 작성하면 최대 worker process * worker connection 만큼의 request를 동시에 처리할 수 있습니다.

image.png

10-2) change pid location

마지막으로 nginx의 pid location도 변경가능합니다.

현재 제 nginx의 pid location은 /run/nginx.pid 입니다.

image.png

이를 변경하고 싶으면 아래와 같이 nginx.conf를 변경하면 됩니다.

worker_processes auto;

pid /run/new_nginx.pid;

events {
    worker_connections 1024;
}

http {
        include mime.types;

        server {
                listen 80;
                server_name 13.209.87.130;
                root /sites/demo;
        }
}

저장후 reload 해보면 아래와 같이 pid가 변경된 것을 확인할 수 있습니다.

image.png


참고 자료 : https://www.udemy.com/course/nginx-fundamentals/


반응형

'Nginx' 카테고리의 다른 글

[Nginx] Adding Dynamic Module  (0) 2020.08.31
[Nginx] Buffer & Timeout  (0) 2020.08.27
[Nginx] Logging  (0) 2020.08.27
[Nginx] Try Files & Named Location  (0) 2020.08.27
[Nginx] Redirect & Rewrite  (0) 2020.08.27

댓글

Designed by JB FACTORY