로그인

  • 목록
  • 아래로
  • 위로
  • 쓰기
  • 검색

정보&강의 32기가 램을 부착한 서버 mariadb, nginx, php-fpm 설정하기

첨부 3

  1. 이미지 2.png (File Size: 53.9KB/Download: 0)
  2. 이미지 3.png (File Size: 12.7KB/Download: 0)
  3. 이미지 5.png (File Size: 19.4KB/Download: 0)

Nignx, MariaDB, PHP-FPM, PHP 를 이용한 서버 운영시, PHP-FPM에서 child process가 부족하여 lock이 걸리는다는 에러가 발생하였고, 이를 해결하기 위해 일단 물리적인 서버램을 32기가로 상향하였습니다..

 

서버 로그에 아래와 같은 메시지가 뜹니다.

[26-Mar-2015 10:10:04] WARNING: [pool www] server reached pm.max_children setting (35), consider raising it 
[26-Mar-2015 12:04:52] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)

 

centos7서버이며, php7.2가 설치되어 있는 상태입니다.

 

php-fpm의 conf 파일을 보면, 아래와 같은 구성이 있습니다.

각 항목에 적절한 수치를 찾는 것이 관건입니다.

 

pm.max_children = 35 

pm.start_servers = 10 

pm.min_spare_servers = 10 

pm.max_spare_servers = 35
 

일단 현재 각 process가 얼마나 메모리를 소모하고 있는지를 확인할 필요가 있습니다.

 

아래 명령어로 찾아봅니다.

#ps -ylC php-fpm --sort:rss

 

이미지 2.png

 

RSS의 각항목의 평균값을 보면 알 수 있습니다. 약 60~70메가가 소모됩니다. 뭐가 많네요. ㅎㅎ

 

더 자세히 편하게 찾아보는 방법은 아래와 같습니다.

#ps --no-headers -o "rss,cmd" -C php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }'

 

이미지 3.png

 

62M가 나왔네요. 

 

저는 32기가의 메모리를 갖추고 있고, 여기에 mysql DB에서 16기가를 사용하고 있습니다.

그럼 32-16=16기가가 되겠네요.

php-fpm에서 사용할 수 있는 메모리가 16기가가 됩니다.

 

만일 계산이 힘들면 아래 명령어로 쉽게 알아 볼 수 있습니다.

#free -h

 

이미지 5.png

23기가가 free한 상태로 있습니다.

 

저는 그냥 16기가로 php-fpm에 할당하려고 합니다.

 

 

평균 62M를 사용하는 processor를 기준으로 pm.max_children은 16000MB / 63MB = 254 로 계산이 됩니다.

즉 총 254개의 php-fpm processor를 띄울 수 있게 되겠네요.

 

그럼 다음과 같이 설정을 할 수 있겠습니다.

 

pm.max_children = 254 //동시 사용할수 있는 최대 프로세스 수

pm.start_servers = 75  //처음 시작할 때 

pm.min_spare_servers = 50 //최소 사용값

pm.max_sapre_servers = 125 //최대  사용값 (이 수가 넘어가면 프로세스 삭제)

 

 

최대 여유 메모리로 php-fpm을 사용할 수 있는 공식이 나왔습니다.

 

하지만, 최대로 사용할 수 있다고 해서 이걸 다 쓰면 서버가 항상 북적거리가 될 겁니다.

딱 기본 메모리만 가지고 있는 254개의 프로세서가 얼마나 빨리 주어진 요청을 해결할 수 있을까요.

63메가로 책정된 메모리값은 각 프로세서들이 아주 기본적인 작업을 할 때 사용하는 메모리용량입니다.

 

작업내용이 많은 요청이 주어진다면, php-fpm의 순간적인 메모리 사용량이 급격히 늘어날 수도 있기 때문에 최대 프로세스 값을 줄여서 적은 수의 프로세서가 넉넉한 메모리용량을 가지고 여유있게 사용할 수 있어야 더 안전하겠죠.

일 못하는 254개의 프로세서를 늘리는 것 보다, 일 잘하는 적은 프로세서 값을 찾아야 합니다.

 

각 프로세스당 63메가를 책정한 수치를 좀더 여유있게 최대 600메가 정도로 여유폭을 준다라고 생각을 해보겠습니다.

 

16000MB / 600MB = 26이 나왔네요.

 

pm.max_children = 26 //동시 사용할수 있는 최대 프로세스 수, 600메가 메모리 사용하는 유저가 동시에 26명이 클릭할 때까지는 문제가 없을 것으로 예상.

pm.start_servers = 8  //처음 시작할 때 max_children 30%선

pm.min_spare_servers = 5 //최소 사용값 max_children 20%선

pm.max_sapre_servers = 13 //최대  사용값 max_children 의 50% (이 수가 넘어가면 프로세스 삭제)

 

 

중요포인트 : php-fpm 프로세서를 많이 띄우려고 하지 말고, 빨리 처리하도록 하는 것이 중요. 그러기 위해서 각 프로세서의 메모리 사용 여유폭을 넉넉히 책정해야함.

 

max_children 이 최대 접속자를 의미한다고 생각하기 보다는, php-fpm의 프로세서가 최대 메모리 사용하면서 띄울 수 있는 가장 혹독한 상황을 가정하여 최대값을 책정하는 것이라고 이해하는 것이 좋습니다.


이런 글도 찾아보세요!

공유

facebooktwitterpinterestbandkakao story
퍼머링크

댓글 0

권한이 없습니다. 로그인

신고

"님의 댓글"

이 댓글을 신고 하시겠습니까?

삭제

"님의 댓글"

이 댓글을 삭제하시겠습니까?