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을 최적화할 수 있습니다.
단, 실제 적용 특성에 따라 설정값을 조정해야 합니다.