>  기사  >  백엔드 개발  >  Linux에서 너무 많은 프로세스로 인해 php-fpm의 메모리가 부족해지는 문제를 해결하는 방법

Linux에서 너무 많은 프로세스로 인해 php-fpm의 메모리가 부족해지는 문제를 해결하는 방법

php中世界最好的语言
php中世界最好的语言원래의
2017-12-20 14:11:521653검색

제 개인 블로그의 Linux 서비스에서 데이터베이스 서비스가 안되는 경우가 많고, 재시작을 해야 정상적으로 접속이 가능한 것을 발견하여, 이 문제에 대한 해결 방법을 알려드리겠습니다.

문제 분석

문제를 발견한 후 먼저 free -m 명령을 사용하여 현재 서버 실행 상태를 확인합니다.


내 서버 메모리가 2G인 것을 볼 수 있지만 현재 사용 가능한 메모리는 70M밖에 없습니다. 메모리가 남아있고 메모리 사용률이 92%에 달하면 메모리 사용량이 너무 많아 데이터베이스 서비스가 중단될 가능성이 매우 높습니다.

계속해서 세부 정보를 살펴보고 top 명령을 사용하세요:


그런 다음 명령 출력 결과에 나열된 프로세스 세부 정보를 살펴보고 열 10의 메모리 사용량 비율에 초점을 맞추세요.


찾습니다. CPU 사용량이 높지 않은 것으로 간주되어 CPU 문제도 해결됩니다. 또한, 데이터베이스 서비스가 메모리의 15.2%를 차지하는 것을 볼 수 있습니다. 메모리 사용량이 너무 높으면 데이터베이스가 혼잡해집니다. 프로세스(가장 많은 메모리를 차지하는 프로세스)로 인해 서비스가 중단되므로 자세한 메모리 사용량을 확인해야 합니다. 어떤 프로세스가 그렇게 많은 메모리를 소비합니까?

명령 사용:

ps auxw|head -1;ps auxw|sort -rn -k4|head -40


가장 많은 메모리를 소비하는 상위 40개 프로세스 보기:


네 번째 열의 메모리 사용량 비율을 보고 mysql 데이터베이스 서비스 외에 해당 항목이 있는지 확인하세요. , php-fpm 서비스 풀 너무 많은 하위 프로세스가 열려 메모리의 절반 이상을 차지했습니다. 문제가 발견되었고 우리는 문제를 해결하기 시작했습니다: php-fpm 프로세스 풀 프로세스 수를 설정하고 제어하는 ​​것입니다.

문제 해결

다양한 검색수단을 통해 pm.max_children property을 구성하여 php-fpm 하위 프로세스 수를 제어할 수 있음을 발견했습니다. 먼저 php-fpm구성 파일을 엽니다. 다음 명령을 실행하십시오:

vi /etc/php-fpm.d/www.conf


pm.max_children 필드를 찾아 해당 값이 너무 큰 것을 발견했습니다.


그림에 표시된 것처럼 pm.max_children 값은 50입니다. 각 프로세스는 1%를 차지합니다. 메모리의 절반 이상을 추가하는 2.5%입니다. 따라서 여기의 블로거는 이 값을 25로 설정해야 합니다. 동시에 다음 두 가지 속성을 확인하세요.

pm.max_spare_servers: 이 값은 보장된 유휴 프로세스의 최대 수를 나타냅니다. 유휴 프로세스가 이 값보다 크면 pm.min_spare_servers 정리: 유휴 프로세스의 최소 수가 이 값보다 작은지 확인합니다.

이 두 값 중 어느 것도 pm.max_children 값보다 클 수 없습니다. 일반적으로 pm.max_spare_servers 값을 .max_children 값의 pm 60%-80%로 설정합니다.

마지막으로 php-fpm을 다시 시작합니다

systemctl restart php-fpm


메모리 사용량을 다시 확인하면 메모리 사용량이 많이 줄어듭니다.


메모리 사용량을 여러 번 관찰한 결과, 이번 개선 이후 서버가 메모리 리소스 소비가 크게 감소되었습니다.

ps: php-fpm에 의해 시작된 프로세스 수와 각 프로세스의 메모리 제한을 확인하세요

1. 이 명령을 사용하여 서버에 열려 있는 php-cgi 프로세스 수를 확인하세요

ps -fe |grep "php-fpm"|grep "pool"|wc -l


2. 이미 몇 개가 있습니까? php-cgi 프로세스는 tcp 요청을 처리하는 데 사용됩니다

netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l


3. Linux+nginx+php 환경에서 각 php-fpm 프로세스의 메모리 제한은

설정 방법:

편집 php-fpm.conf 구성 파일

php_admin_value[memory_limit] = 128M (내 서버의 구성 파일은 /etc/php5/fpm/pool.d/www.conf에 있습니다. 이 파일은 php-fpm.conf에 포함되어 있습니다. ) 다음 숫자는 마음대로 변경할 수 있습니다: 32M, 64M, 128M, 256M, 512M. 이 설정은 서버 메모리 크기와 필요에 따라 작성할 수 있습니다. 수정 후 php-fpm 서비스를 로드해야 합니다.


이 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

관련 읽기:

자바 알고리즘의 이진 검색 및 이진 검색의 자세한 예

javascript 이진 검색 자세한 설명_javascript 기술

javascript 이진 검색 배열 내 문자 위치(순서) 목록)_javascript 팁

위 내용은 Linux에서 너무 많은 프로세스로 인해 php-fpm의 메모리가 부족해지는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.