programing

php 프로세스 메모리 사용을 최적화하는 방법

i4 2023. 3. 2. 21:58
반응형

php 프로세스 메모리 사용을 최적화하는 방법

워드프레스 사이트를 운영하고 있으며 각 PHP 프로세스 사용량은 200~250mb의 상주 메모리입니다.16GB의 RAM으로 서버는 약 70개의 프로세스만 처리할 수 있습니다.가상 메모리를 16GB로 늘리면 140개의 메모리를 처리할 수 있습니다.그 후 부하는 계속 상승한다.10분 동안 200개의 연결이 있을 경우 3Ghz 쿼드코어 Xeon 프로세서에서 서버 로드는 20에 달합니다.

모든 플러그인을 비활성화하려고 시도했지만 각 프로세스의 PHP 메모리 사용량을 10% 미만으로 줄였을 뿐입니다.suPHP는 어떤 사용자가 메모리를 그렇게 많이 사용하고 있는지 알려 주지만 워드프레스 코드의 어떤 부분은 알려주지 않습니다.

메모리 사용량을 줄이는 방법에 대해 제안해 주시겠습니까?아니면 32GB RAM으로 업그레이드하는 방법밖에 없나요?

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10585 nobody    16   0 2266m 237m 199m S 21.3  1.5   1:09.17 /usr/bin/php
10597 nobody    16   0 2257m 255m 226m S 15.3  1.6   0:17.56 /usr/bin/php

pmap -d의 최대 출력

000000000e8b8000   27580 rw--- 000000000e8b8000 000:00000   [ anon ]
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [ shmid=0x2d1b803a ]
00002b37f2a62000   55108 r---- 0000000000000000 0fd:00000 locale-archive
mapped: 2320852K    writeable/private: 30012K    shared: 2097152K

ipcs 출력

------ Semaphore Arrays --------

key        semid      owner      perms      nsems
0x000000a7 0          root      600        1
0x00000000 162529281  nobody    600        1
0x00000000 162562050  nobody    600        1
0x00000000 162594819  nobody    600        1
0x00000000 162627588  nobody    600        1
------ Message Queues --------

key        msqid      owner      perms      used-bytes   messages`

문제를 찾기 위해 리사가 한 일을 요약합니다.

  • 단일 PHP 프로세스의 메모리 레이아웃을 확인합니다.pmap -d <pid>출력 결과 프로세스에서 사용되는 공유 메모리의 양이 매우 많은 것으로 나타났습니다.
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [ shmid=0x2d1b803a ]
  • 공유 메모리 영역을 조사합니다.ipcs -m사용자 nobody(웹 서버)에 의해 생성된 공유 메모리 영역이 많은 것으로 나타났습니다.다음은 그 중 일부입니다.
0x00000000 117964807 nobody 600 2147483648 1 dest 
0x00000000 117997576 nobody 600 2147483648 1 dest 
0x00000000 118030345 nobody 600 2147483648 1 dest
0x00000000 118063114 nobody 600 2147483648 1 dest
  • php.ini에서 eAccelerator를 사용하지 않도록 설정하고 생성된 공유 메모리 영역을 제거합니다.

ipcs - m | cut - d' ' - f2 | grep '^ [ 0 - 9 ]'의 i의 경우, ipcrm - m $i; done

Rasmus Lerdorf는 2010년 Confoo에서 PHP 퍼포먼스에 관한 컨퍼런스를 개최하여 Wordpress 블로그를 예로 들었습니다.이것에 의해, 당신의 질문에 대답할 수 있는 훌륭한 툴을 얻을 수 있을 것입니다.

http://talks.php.net/show/confoo10/1

정리하면:

  • 를 실행합니다.phpinfo()사용하지 않는 PHP 확장자를 비활성화합니다.메모리(이미지, 컬 등)가 많이 필요함
  • inclued.so 확장자를 사용하여의 include 그래프를 생성합니다.워드프레스 설정에 불필요한 기능이 로드될 수 있습니다.
  • 벤치마크 실행siege작은 최적화가 퍼포먼스에 큰 영향을 미치는 경우가 있습니다.따라서 결정을 내리는 데 도움이 되는 측정 기준을 준비해 두십시오.
  • 콜그라인드를 사용하여 퍼포먼스가 저하되고 있는 부분을 나타냅니다.제 프로젝트 중 하나는md5()내 SQL 쿼리를 해시하고 캐시합니다.md5()CPU 시간의 20%를 사용하여 콜을 발신합니다.

가능하면 PHP 확장자를 사용하지 않도록 하겠습니다.

언급URL : https://stackoverflow.com/questions/10353568/how-to-optimize-the-php-process-memory-usage

반응형