Amazon EC2(t3a.medium) 인스턴스에서 NGINX 및 PHP-FPM으로 웹 서버를 생성하고 최대 동시 연결 수를 설정하는 방법

Amazon EC2(t3a.medium) 인스턴스에서 NGINX 및 PHP-FPM으로 웹 서버를 생성하고 최대 동시 연결 수를 설정하는 방법

아마존 EC2 t3a.medium 인스턴스에서 NGINX 및 PHP-FPM으로 웹 서버를 생성하고 최대 동시 연결 수를 설정하는 방법.

Amazon EC2 인스턴스 유형

https://aws.amazon.com/en/ec2/instance-types/


1. NGINX worker_processes 구성

EC2 t3a.medium 인스턴스에는 2개의 vCPU가 있으므로 worker_processes 설정을 2로 설정할 수 있습니다.

worker_processes 2;
$ cat /etc/nginx/nginx.conf | egrep worker_processes
worker_processes auto;

2. NGINX worker_connections 설정

worker_connections 설정은 최대 동시 연결 수를 제한합니다.

t3a.medium 인스턴스의 메모리는 4GB이므로 약 1024로 설정할 수 있습니다.

worker_connections 1024;
$ cat /etc/nginx/nginx.conf | egrep worker_connections
    worker_connections 1024;

PHP FPM에서 사용 가능한 알림 ↓↓↓↓↓

더보기

사용 가능한 메모리 = 총 메모리(①) – 사용 중인 메모리(② – ③)

① 총 메모리

free -k | awk 'NR==2{print $2}'

② 현재 시스템에서 사용하고 있는 메모리의 합

free -k | awk 'NR==2{print $3}NR==3{print $2}' | paste -sd+ | bc

현재 시스템에서 php-fpm에서 사용하는 총 메모리

ps aux | egrep 'nginx|php-fpm' | awk '{sum += $6} END {print sum}'

전)

여유 메모리 = 3967764 – 720216 – 201092

$ cat /proc/meminfo | grep MemTotal | awk '{print $2}' 
3967764
$ free -k | awk 'NR==2{print $3}NR==3{print $2}' | paste -sd+ | bc
721144
$ ps aux | egrep 'php-fpm' | awk '{sum += $6} END {print sum}'
201092

PHP FPM 프로세스당 메모리 ↓↓↓↓↓

더보기

PHP-FPM 프로세스의 메모리 사용량 확인

$ ps -ylC php-fpm --sort:rss
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S  1001 16818 24508  0  80   0  8828 79605 -      ?        00:00:00 php-fpm
S  1001 16824 24508  0  80   0  8828 79605 -      ?        00:00:00 php-fpm
S  1001 16830 24508  0  80   0  8828 79605 -      ?        00:00:00 php-fpm

PHP-FPM 프로세스당 평균 메모리 사용량 계산

$ ps -ylC php-fpm --sort:rss | awk '{sum += $8; ++n} END {print sum / n}'
9098.73

(또는) PHP-FPM 프로세스당 평균 메모리 사용량 계산

$ ps -e -o pid,rss,cmd | grep php-fpm | grep -v grep | awk '{print $2}' | awk '{s+=$1} END {print s/NR}'
9532

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

t3a.medium 인스턴스에는 2개의 vCPU가 있으므로 pm.max_children 설정을 약 20-30으로 설정할 수 있습니다.

사용 가능한 메모리 = 총 메모리 – OS용 메모리(4GB) – 기타 서비스용 메모리(OS용 – 기타 서비스용)

pm.max_children = 사용 가능한 메모리 / PHP-FPM 프로세스당 메모리

pm.max_children = 20;

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

pm.max_requests 설정은 각 PHP 프로세스가 처리할 수 있는 최대 요청 수를 결정합니다.

일반적으로 500으로 설정합니다.

pm.max_requests = 500;

이러한 설정을 적용하면 t3a.medium 인스턴스가 최대 동시 사용자 수를 처리하도록 NGINX 및 PHP-FPM을 최적화할 수 있습니다.

단, 실제 적용 특성에 따라 설정값을 조정해야 합니다.