php-cgi 메모리 사용량이 php의 메모리 제한보다 높습니다.

php-cgi 메모리 사용량이 php의 메모리 제한보다 높습니다.

저는 작업자 MPM으로 아파치를 실행하고 fastcgi로 PHP를 실행하고 있습니다.

다음은 내 mpm 한도입니다.

StartServers         5
MinSpareThreads      5
MaxSpareThreads      10
ThreadLimit          64
ThreadsPerChild      10
MaxClients           10
MaxRequestsPerChild  2000

또한 다음과 같이 php-cgi를 설정했습니다.

PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500

내 평균 php-cgi 프로세스는 시작되자마자 약 200MB 이상의 RAM을 사용하고 있는 것으로 나타났습니다. 그러나 내 PHP memory_limit는 128M에 불과합니다.

이것이 어떻게 가능하며, php-cgi 메모리 소비를 낮추려면 어떻게 해야 합니까?

답변1

PHP가 구성된 메모리 제한을 초과할 수 있는 경우가 있습니다(메모리 확장에서 직접 메모리가 할당됨). 그러나 나는 이것이 사실이 아닐 수도 있다고 생각합니다.

내 평균 php-cgi 프로세스가 약 200MB 이상을 사용하고 있는 것으로 나타났습니다.

이것을 어떻게 측정했나요? 대부분의 TXT 세그먼트는 공유되므로 실제 메모리 사용량은 /proc 파일 시스템이나 ps/top에서 볼 수 있는 것보다 훨씬 적습니다. lsof의 출력을 구문 분석해 볼 수도 있지만 실제로는 조금 뒤로 물러서서 진행 중인 요청 수(예: 연결된 소켓 수)를 살펴보고 이를 보고된 여유 메모리와 비교하는 것이 훨씬 더 합리적이라고 생각합니다( 더 적은 버퍼/캐시).

답변2

PHP의 메모리 제한은 내부 메모리 제한입니다. 즉, 엔진이 사용자 스크립트가 개인 할당자를 통해 할당할 수 있도록 허용하는 양입니다. 그러나 그 외에도 엔진이 내부 요구에 따라 할당하는 메모리가 있는데, 이는 항상 제한에 포함되지는 않습니다(일부는 그렇지만 전부는 아님), 라이브러리에서 할당되는 메모리 등. 따라서 실제 메모리를 기대합니다. 설정 보다 사용량이 약간 더 커집니다 memory_limit.

또한 위에서 언급한 것처럼 툴에서 보고하는 수치 중 일부는 코드에 할당된 메모리, 스택, OS I/O 버퍼, 라이브러리 간 공유 메모리 등이므로 어떤 수치를 확인하고 있는지 자세히 살펴보세요.

관련 정보