퍼블릭 클라우드

Amazon EC2(t3a.medium) 인스턴스에서 NGINX와 PHP-FPM을 사용하여 웹 서버를 구축하고 최대 동시 접속자 수를 설정하는 방법

코드버스 2023. 3. 24. 14:37
728x90
반응형

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을 최적화하여 최대 동시 접속자 수를 처리할 수 있습니다. 단, 실제 사용하는 애플리케이션의 특성에 따라 설정값은 조정이 필요합니다.

 

728x90
반응형