Amazon EC2(t3a.medium) 인스턴스에서 NGINX와 PHP-FPM을 사용하여 웹 서버를 구축하고 최대 동시 접속자 수를 설정하는 방법
Amazon EC2(t3a.medium) 인스턴스에서 NGINX와 PHP-FPM을 사용하여 웹 서버를 구축하고 최대 동시 접속자 수를 설정하는 방법
Amazon EC2 t3a.medium 인스턴스에서 NGINX와 PHP-FPM을 사용하여 웹 서버를 구축하고 최대 동시 접속자 수를 설정하는 방법은 다음과 같습니다.
Amazon EC2 instance types
- https://aws.amazon.com/ko/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}'
ex)
사용 가능한 메모리 = 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
(or) 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을 최적화하여 최대 동시 접속자 수를 처리할 수 있습니다. 단, 실제 사용하는 애플리케이션의 특성에 따라 설정값은 조정이 필요합니다.