NGINX 및 PHP-FPM으로 웹 서버를 만들고 최대 동시 사용자 수를 설정하는 방법

NGINX 및 PHP-FPM으로 웹 서버를 만들고 최대 동시 사용자 수를 설정하는 방법

NGINX 및 PHP-FPM으로 웹 서버를 만들고 최대 동시 연결 수를 설정하는 방법.

1. NGINX worker_processes 구성

NGINX worker_processes 설정은 웹 서버의 CPU 코어 수에 따라 결정됩니다.
일반적으로 worker_processes 수는 CPU 코어 수와 동일하게 설정합니다.
예를 들어 CPU가 4개인 경우 worker_processes를 4로 설정할 수 있습니다.

worker_processes 4;

2. NGINX worker_connections 설정

NGINX worker_connections 설정은 동시 연결 수를 제한합니다.
이 값을 적절하게 조정하여 최대 동시 사용자 수를 설정할 수 있습니다.
예를 들어 1024로 설정하면 최대 1024개의 동시 연결을 처리할 수 있습니다.

worker_connections 1024;

3. PHP-FPM에서 pm.max_children 설정

PHP-FPM의 pm.max_children 설정은 최대 PHP 프로세스 수를 결정합니다.
이 값을 적절하게 조정하여 최대 동시 사용자 수를 설정할 수 있습니다.
예를 들어 1000으로 설정하면 최대 1000개의 PHP 프로세스가 동시에 실행될 수 있습니다.

4GB 메모리에서 평균 메모리 사용량이 50MB인 PHP 스크립트를 실행하면 다음과 같이 설정할 수 있습니다.

pm.max_children = (4000/50) = 80

pm.max_children = 1000;

4. PHP-FPM에서 pm.max_requests 설정

PHP-FPM의 pm.max_requests 설정은 각 PHP 프로세스가 처리할 수 있는 최대 요청 수를 결정합니다.
이 값을 적절하게 조정하면 메모리 누수를 방지하고 PHP 프로세스를 안정적으로 유지할 수 있습니다.
예를 들어 값이 500으로 설정된 경우 각 PHP 프로세스는 최대 500개의 요청을 처리할 수 있습니다.

pm.max_requests = 500;

이 설정을 조정하여 NGINX 및 PHP-FPM을 최적화하여 더 많은 동시 사용자를 처리합니다.
단, 서버 사양 및 애플리케이션의 특성에 따라 설정을 조정해야 합니다.


PHP 프로세스가 평균 50MB의 메모리를 사용하고 서버의 메모리가 4GB인 경우pm.max_children의 값을 계산하려면:

1. 사용 가능한 메모리 계산

먼저 사용 가능한 메모리를 계산해야 합니다.
이 값을 계산하려면 다음 공식을 사용할 수 있습니다.

Available Memory = Total Memory - Memory for OS - Memory for other services

일반적으로 운영 체제 및 기타 서비스는 메모리를 사용하므로 사용 가능한 메모리는 물리적 메모리의 일부입니다.
이 값은 서버의 메모리에 따라 다릅니다.

예를 들어, 4GB RAM의 경우 약 3GB의 사용 가능한 RAM이 있습니다.
이는 다음과 같이 계산할 수 있습니다.

Available Memory = 4GB - 1GB(for OS) - 0.5GB(for other services)
                 = 2.5GB

2. pm.max_children 계산

pm.max_children 값을 계산하려면 사용 가능한 메모리와 PHP 프로세스에서 사용하는 메모리를 고려해야 합니다.
일반적으로 사용 가능한 메모리의 50% 이상을 PHP 프로세스에 할당하지 않는 것이 좋습니다.
따라서 다음 계산식을 사용할 수 있습니다.

pm.max_children = Available Memory / Memory per PHP Process

여기서 PHP 프로세스당 메모리는 PHP 프로세스에서 사용하는 평균 메모리 양을 의미합니다.
이 값은 문제에 따라 다르지만 이 경우에는 50MB입니다.
이 값을 대입하면 다음과 같이 계산됩니다.

pm.max_children = 2.5GB / 50MB
                = 50

따라서 이 경우 pm.max_children의 값을 50으로 설정하는 것이 적절하다.
그러나 실제 응용 프로그램의 특성에 따라 조정이 필요할 수 있습니다.