nginx에서 서버최적화할때

 

free -m으로

 

available 사이즈 구해서

 

php-fpm 평균메모리 사용량으로 나눈 값을

 

pm.max_children로 설정한다고 들었습니다.

 

제가 서버쪽은 문외한이라 개념을 잘 정립이 안되었는데, 제가 이해하기로는

 

사용자가 페이지.php를 클릭하였을 때마다 php가 실행되기 위해 필요한 메모리값이

 

php-fpm 평균메모리라고 이해했는데 맞을까요?

 

그래서 동시에 php 페이지를 열때 메모리부족을 방지하기위해 maxchidren 으로 제한을 거는 것.

 

일까요??

 

 

저같은 경우  플랫폼만 깔았는데 기본 28M정도 되네요 php-fpm 평균메모리값이

생각보다 많네요 ㄷㄷ 

 

 

 

 

 

 

 

 

 

 

  • profile

    메모리 부족을 방지하기 위해서 제한하는 것은 맞습니다. 그러나 평균메모리가 아니라 최대메모리(memory_limit)도 감안해야 합니다. 사진 하나 썸네일 생성하는 데 100M 이상 사용하거든요. PHP-FPM 엔진의 메모리 사용량뿐 아니라 실제 PHP로 구현된 프로그램을 해석하여 실행할 때 사용하는 용량이 천차만별이라는 점도 감안해야 하기 때문에, 공회전 상태의 평균 메모리 사용량만 보시면 안됩니다.

     

    보통 PHP에서 memory_limit을 128M로 해놓기 때문에, DB를 돌리고 남는 용량을 128M로 나누는 것이 가장 안전합니다. 이렇게 해놓으면 1년 내내 돌려도 다운되지 않아요. 그러나 RAM이 넉넉하지 않은 서버에서는 이렇게 계산하면 pm.max_children 값이 지나치게 낮아질 수도 있습니다. 썸네일 사용 빈도가 높지 않은 사이트라면 평균과 최대의 중간치(70~80MB)로 잡아서 약간의 스릴을 즐기셔도 됩니다. 오늘은 과연 서버가 버텨줄 것인가!! ㅋㅋ

     

    이 글과 댓글을 참고하세요: https://xetown.com/board/943152#comment_943189

  • profile ?
    감사합니다! 동시에 메모리는 쓴다는 개념이
    한명당 php 처리시간이 만약 10초라고 하면
    이 처리 시간 10초가 끝나기전에
    다른사람이 또 요청했을 때를 말하는 것이지요??
    그래서 maxchildren 을 100으로 설정한 뒤
    2~3천명이 사이트에 접속하여도, 동시에 100명이 클릭할 일은 적으므로
    문제없이 돌아갈 수있나요??
  • ? profile

    네, 동시에 쓰지만 않으면 괜찮습니다.

    링크해드린 댓글에도 썼듯이, pm.max_children은 (동접수 ÷ 100) 정도면 충분합니다. 제대로 튜닝된 서버의 요청 소요시간은 평균 1초도 안 되니까요. 게다가 nginx라면 CSS, JS, 이미지 파일 등을 요청하는 것은 nginx단에서 처리하고 끝나므로 pm.max_children에 카운트되지도 않습니다.

    물론 특별히 무거운 기능(한 명의 사용자가 동시에 여러 번 AJAX 요청을 하도록 만드는 애드온 등)을 사용하지 않는다는 가정 하에 그렇습니다만, 이런 경우에도 CPU 코어수에 비해 지나치게 많은 작업을 동시에 처리하도록 하면 오히려 모든 요청이 느려집니다. 사람은 동시에 접속하더라도 서버에서는 순차적으로 처리하면 그만이니, 메모리가 아무리 많아도 pm.max_children이 CPU 코어수의 4~6배수를 넘어가지는 않도록 하고 그 대신 listen.backlog를 적당히 주어 질서정연하게 기다리도록 하면 됩니다.

    제가 pm.max_children 100 이상으로 튜닝해 드린 서버가 딱 하나 있는데, 피크 동접수가 1~2만 명이고 CPU가 20코어 40쓰레드입니다. 이 정도 사양이 아니라면 100은 생각도 하지 마세요. 일반적인 E3 CPU를 사용하는 서버호스팅은 30~40, 그것보다 사양이 낮은 가상서버는 10~20 범위가 적정선입니다.

  • profile ?
    아 감사합니다 서버에 대해 점점 알아가는 거같네요