본문 바로가기

리눅스

[draft] PHP 메모리 사용량 확인

728x90

PHP 메모리 사용량 확인

1. CPU 개수 출력

nproc
4

2. 모든 PHP-FPM 프로세스 정보 출력(php-fpm8.3)

ps -ylC php-fpm8.3
S   UID     PID    PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0     667       1  0  80   0 20540 51058 ep_pol ?        00:00:00 php-fpm8.3
S    33     830     667  0  80   0  7748 51170 skb_wa ?        00:00:00 php-fpm8.3
S    33     831     667  0  80   0  7748 51171 skb_wa ?        00:00:00 php-fpm8.3

3. PHP-FPM 프로세스의 메모리 사용량 출력(php-fpm8.3)

  • comm : 명령어 (프로세스 이름)
  • rss : 실제 메모리 사용량 (Resident Set Size) (KB)
  • pmem : 메모리 사용 비율 (Percentage of Memory)
ps -eo comm,rss,pmem --sort=-rss | grep php-fpm
php-fpm8.3      20540  0.5
php-fpm8.3       7748  0.1
php-fpm8.3       7748  0.1

또는

ps -eo rss,pid,user,command --sort -rss | grep -v grep | \
awk '{ hr=$1/1024 ; printf("%13.2f Mb ", hr) } { for (x=4; x<=NF; x++) { printf("%s ", $x) } print "" }' | grep php-fpm
        20.06 Mb php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)
         7.57 Mb php-fpm: pool www
         7.57 Mb php-fpm: pool www
더보기

---

가상 메모리 사용량(Virtual Memory Size, VSZ), MB 단위

ps -eo size,pid,user,command --sort -size | grep -v grep | \
awk '{ hr=$1/1024 ; printf("%13.2f Mb ", hr) } { for (x=4; x<=NF; x++) { printf("%s ", $x) } print "" }' | grep php-fpm
         5.64 Mb php-fpm: pool www
         5.64 Mb php-fpm: pool www
         5.50 Mb php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)

---

4. PHP-FPM 프로세스의 평균 메모리 사용량을 확인

현재 실행 중인 PHP-FPM 프로세스의 평균 메모리 사용량을 MB 단위로 계산하여 출력

ps -eo rss,comm | grep php-fpm | awk '{ sum += $1 } END { if (NR > 0) print sum / NR / 1024 " MB"; else print "No processes found" }'
11.7305 MB

또는

ps --no-headers -o "rss,cmd" -C php-fpm8.3 | \
awk '{ sum+=$1 } END { if (NR > 0) { printf ("%d%s\n", sum/NR/1024, "M") } else { print "0M" } }'
11M

5. 모든 프로세스의 메모리 사용량 출력

ps -eo rss,pid,user,command --sort -rss | grep -v grep | \
awk '{ hr=$1/1024 ; printf("%13.2f Mb ", hr) } { for (x=4; x<=NF; x++) { printf("%s ", $x) } print "" }' | head -n 10
         0.00 Mb COMMAND
        82.26 Mb /usr/sbin/mariadbd
        28.86 Mb /lib/systemd/systemd-journald
        26.60 Mb /sbin/multipathd -d -s
        20.98 Mb /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
        20.20 Mb /usr/libexec/packagekitd
        20.06 Mb php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)
        18.52 Mb /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
        12.68 Mb /usr/libexec/udisks2/udisksd
        11.85 Mb /usr/sbin/ModemManager
더보기

---

모든 프로세스의 가상 메모리 사용량 출력

ps -eo size,pid,user,command --sort -size | grep -v grep | \
awk '{ hr=$1/1024 ; printf("%13.2f Mb ", hr) } { for (x=4; x<=NF; x++) { printf("%s ", $x) } print "" }' | head -n 10
         0.00 Mb COMMAND
       503.91 Mb /usr/sbin/mariadbd
        42.70 Mb /usr/bin/redis-sentinel 0.0.0.0:26379 [sentinel]
        42.70 Mb /usr/bin/redis-server 0.0.0.0:6379
        42.04 Mb /usr/libexec/udisks2/udisksd
        33.94 Mb /usr/sbin/ModemManager
        26.05 Mb /usr/libexec/packagekitd
        25.14 Mb /usr/libexec/polkitd --no-debug
        19.19 Mb (sd-pam)
        19.02 Mb /sbin/init

---

728x90

pm.dynamic 모드에서 PHP 프로세스를 설정 - 1

  • CPU : 40EA
  • 메모리 : 32GB = 32,000MB
  • PHP 프로세스당 메모리 : 80MB

서버의 메모리 용량에 따라 최대 프로세스 수를 계산합니다.(시스템용으로 4GB 할당)

28,000MB / 80MB = 350
  • pm.start_servers : 초기 서버 시작 시 몇 개의 프로세스를 시작할지 설정합니다. vCPU 수를 기준으로 20~40개 정도로 설정하는 것이 좋습니다.
  • pm.min_spare_servers : 최소 유휴 프로세스 수를 설정합니다. 보통 vCPU 수의 절반 정도인 15~20개를 설정할 수 있습니다.
  • pm.max_spare_servers : 최대 유휴 프로세스 수를 설정합니다. vCPU 수에 맞춰 20~40개 정도로 설정하는 것이 좋습니다.
pm = dynamic
pm.max_children = 350
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 40

pm.dynamic 모드에서 PHP 프로세스를 설정 - 2

  • CPU : 8EA
  • 메모리 : 16GB = 16,000MB
  • PHP 프로세스당 메모리 : 50MB

서버의 메모리 용량에 따라 최대 프로세스 수를 계산합니다.(시스템용으로 2GB 할당)

14,000MB / 50MB = 280
  • pm.start_servers : 초기 PHP-FPM 서버 시작 시 몇 개의 프로세스를 시작할지 설정합니다. vCPU 수를 고려하여 8~16개로 설정할 수 있습니다.
  • pm.min_spare_servers : 최소 유휴 프로세스 수를 설정합니다. 일반적으로 vCPU 수의 절반 정도인 4~8개로 설정할 수 있습니다.
  • pm.max_spare_servers : 최대 유휴 프로세스 수를 설정합니다. 초기값으로 vCPU 수와 비슷한 8~16개로 설정할 수 있습니다.
pm = dynamic
pm.max_children = 280
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15

 

참고URL

- PHP Documentation : FastCGI Process Manager(FPM)

 

0.00Mb 명령 82.26Mb /usr/sbin/mariadbd 28.86Mb /lib/systemd/systemd-journald 26.60Mb /sbin/multipathd -d -s 20.98Mb /usr/bin/python3 /usr/share/unattended-upgrades/unattended- 업그레이드-종료 --wait-for-signal 20.20Mb /usr/libexec/packagekitd 20.06Mb php-fpm: 마스터 프로세스(/etc/php/8.3/fpm/php-fpm.conf) 18.52Mb /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers 12.68Mb /usr/libexec/udisks2/udisksd 11.85Mb /usr/sbin/ModemManager
 
728x90