>백엔드 개발 >PHP 튜토리얼 >Linux에서 너무 많은 php-fpm 프로세스로 인해 발생하는 메모리 소모 문제 해결에 대한 자세한 설명

Linux에서 너무 많은 php-fpm 프로세스로 인해 발생하는 메모리 소모 문제 해결에 대한 자세한 설명

jacklove
jacklove원래의
2018-07-07 17:55:373023검색

이 글에서는 리눅스에서 너무 많은 php-fpm 프로세스로 인해 발생하는 메모리 소모 문제를 해결하는 방법을 주로 소개합니다. 도움이 필요한 친구들은

을 참고하세요. 최근에 리눅스 서버와 데이터베이스를 발견했습니다. 내 개인 블로그 서비스가 자주 중단되어 정상적인 액세스가 가능해지기 전에 다시 시작해야 합니다. 매우 역겨워서 문제 해결을 시작하고 시간과 에너지를 확보하기로 결정했습니다. 수동으로 다시 시작하는 것은 힘들고 시간이 많이 걸립니다).

문제 분석

문제를 발견한 후 먼저 free -m을 사용하세요. code> 현재 서버 실행 상태를 보는 명령어: <code>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 属性,控制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 值为 pm.max_children

내 서버 메모리가 2G인 것을 볼 수 있는데, 현재 사용 가능한 메모리는 70M밖에 남지 않았고, 메모리 사용량도 92%에 달한다. 그럴 가능성이 매우 높다. 메모리 사용량이 너무 높아서 데이터베이스 서비스가 중단됩니다.

계속해서 세부정보를 확인하고 top 명령을 사용하세요.

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

CPU 사용량이 높지 않은 것으로 확인되었으며, CPU 문제는 배제되었습니다. 또한, 메모리 사용량이 너무 높을 경우 데이터베이스 서비스가 메모리의 15.2%를 차지하는 것을 확인할 수 있습니다. 프로세스(메모리 사용량이 가장 많은 프로세스)가 압착되므로 서비스가 중단되므로 메모리 사용량을 자세히 확인해야 하는 프로세스는 무엇입니까?

명령 사용:

systemctl restart php-fpm

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

보기 네 번째 열에는 mysql 데이터베이스 서비스 외에도 php-fpm 서비스 풀이 너무 많은 하위 프로세스를 열어 메모리의 절반 이상을 차지하는 문제가 발견되었습니다. 우리는 문제 해결을 시작합니다: php-fpm 프로세스 풀 프로세스 수량을 설정하고 제어합니다.


문제 해결

다양한 검색 방법을 통해 를 구성할 수 있는 것으로 나타났습니다. pm.max_children 속성은 php-fpm 하위 프로세스 수를 제어합니다. 먼저 php-fpm 구성 파일을 열고

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

명령을 실행합니다. #🎜🎜 # 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 값은 pm.max_children 값의 60%-80%로 설정됩니다. .

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

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

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

#🎜🎜##🎜🎜# 메모리 사용량을 여러 번 관찰한 결과, 이번 개선 이후 서버 메모리 리소스 소모가 크게 완화되었음을 발견했습니다. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#ps: php-fpm으로 열린 프로세스 수와 각 프로세스의 메모리 제한 보기 #🎜🎜##🎜🎜##🎜🎜##🎜🎜 #1. #🎜🎜##🎜🎜##🎜🎜#rrreee#🎜🎜##🎜🎜##🎜🎜#2 명령을 통해 서버에 열려 있는 php-cgi 프로세스 수를 확인하세요. cgi 프로세스가 이미 실행 중입니다. 이 프로세스는 tcp 요청을 처리하는 데 사용됩니다. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#rrreee#🎜🎜##🎜🎜##🎜🎜#3. 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 서비스를 로드해야 합니다. . #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Summary#🎜🎜##🎜🎜##🎜🎜##🎜🎜#위는 편집자가 소개한 Linux에서의 php-fpm 프로세스입니다. 종종 메모리 피로를 유발하는 문제가 해결되었습니다. 모든 분들께 도움이 되기를 바랍니다. 질문이 있는 경우 메시지를 남겨주시면 편집자가 제 시간에 답변해 드리겠습니다. 또한 PHP 중국어 웹사이트를 지원해 주신 모든 분들께 감사드립니다! #🎜🎜##🎜🎜##🎜🎜#

당신이 관심을 가질 만한 기사:

PHP에서 체크인 기능을 구현하는 방법의 예에 대한 자세한 분석

#🎜 🎜#Linux에서의 php-fpm 매개변수 구성 소개 및 매개변수 최적화 지침에 대한 자세한 설명

데이터 마이그레이션 및 데이터에 대한 자세한 설명 Laravel 채우기#🎜🎜 #

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

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