이 글에서는 리눅스에서 너무 많은 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
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을 다시 시작합니다 메모리 사용량을 다시 확인하면 메모리 사용량이 줄어듭니다. 많이: PHP에서 체크인 기능을 구현하는 방법의 예에 대한 자세한 분석 #🎜 🎜#Linux에서의 php-fpm 매개변수 구성 소개 및 매개변수 최적화 지침에 대한 자세한 설명 데이터 마이그레이션 및 데이터에 대한 자세한 설명 Laravel 채우기#🎜🎜 # 위 내용은 Linux에서 너무 많은 php-fpm 프로세스로 인해 발생하는 메모리 소모 문제 해결에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l
당신이 관심을 가질 만한 기사: