extension_dir=""
extension_dir=""
expose_php = Off
display_errors = Off
log_errors = On
zend_extension=opcache.so extension=mysqli.so extension=pdo_mysql.so
date.timezone = PRC
opcache.enable=1
open_basedir = /usr/share/nginx/html;
error_log = /usr/local/php/logs/php-fpm.log
include=/usr/local/php7/etc/php-fpm.d/*.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
emergency_restart_threshold = 60
emergency_restart_interval = 60s
process_control_timeout = 0
daemonize = yes
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www listen.group = www listen.mode = 0666
user = www group = www
php-fpm 进程池优化方法
pm = dynamic
expose_php = Off
pm.max_children
pm.start_servers
pm.min_spare_servers
pm.max_spare_servers
display_errors = Off
🎜🎜🎜PHP가 mysql을 호출할 때 오류 정보 노출 방지🎜🎜🎜log_errors = On
code>🎜🎜🎜display_errors를 끈 후 PHP 오류 로그 활성화(경로는 php-fpm.conf에서 구성됨)🎜🎜🎜zend_extension=opcache.so 확장=mysqli.so 확장=pdo_mysql.so
🎜 🎜🎜PHP의 opcache 및 mysql 동적 라이브러리 설정🎜🎜🎜date.timezone = PRC
🎜🎜🎜PHP의 시간대 설정🎜🎜🎜opcache.enable=1
🎜🎜🎜 opcache 켜기🎜🎜🎜open_basedir = /usr/share/nginx/html;
🎜🎜🎜PHP 스크립트가 액세스할 수 있는 디렉터리를 설정합니다(실제 설정에 따라 구성해야 함). 상황)🎜🎜error_log = /usr/local/php/logs/php-fpm.log
🎜🎜🎜오류 로그 경로를 설정하세요🎜🎜🎜include=/usr/local/php7/etc/php-fpm. d/*.conf
🎜🎜🎜(기본적으로 설정됨) 🎜🎜pid = run/php -fpm.pid
🎜🎜🎜pid 설정, 기본값은 설치 디렉터리의 var/run/php-fpm.pid입니다. 켜는 것이 좋습니다🎜🎜🎜error_log = log/php-fpm.log
🎜🎜🎜오류 로그, var/log/php-fpm.log는 기본적으로 설치 디렉터리에 있습니다🎜🎜🎜log_level = 통지🎜🎜🎜오류 수준은 다음과 같습니다. 경고(즉시 처리해야 함), 오류(오류 상황), 경고(경고 상황), 통지(일반적인 중요 정보), 디버그(디버깅 정보) ). 기본값: 통지.🎜🎜🎜emergency_restart_threshold = 60
🎜🎜emergency_restart_interval = 60s
🎜🎜🎜는 SIGSEGV 또는 SIGBUS 오류가 있는 php-cgi 프로세스의 수가 Emergency_restart_interval 값이 Emergency_restart_threshold를 초과하면 php-fpm이 정상적으로 다시 시작됩니다. 이 두 가지 옵션은 일반적으로 기본값으로 유지됩니다. 🎜🎜🎜process_control_timeout = 0
🎜🎜🎜주 프로세스의 재사용 신호를 수락하기 위한 하위 프로세스의 시간 제한을 설정합니다. 사용 가능한 단위: s(초), m(분), h(시간) 또는 d(일) 기본 단위: s(초). 기본값: 0.🎜🎜🎜daemonize = yes
🎜🎜🎜백그라운드에서 fpm을 실행합니다. 기본값은 yes입니다. 변경할 수 있습니다. 디버깅을 위해서는 아니오로 설정하세요. FPM에서는 서로 다른 설정으로 여러 프로세스 풀을 실행할 수 있습니다. 이러한 설정은 각 프로세스 풀에 대해 개별적으로 설정할 수 있습니다. 🎜🎜🎜listen = 127.0.0.1:9000
🎜🎜🎜 수신 포트는 nginx에서 PHP가 처리하는 주소입니다. 일반적으로 기본값이면 충분합니다. 사용 가능한 형식은 'ip:port', 'port', '/path/to/unix/socket'입니다. 각 프로세스 풀을 설정해야 합니다.🎜🎜🎜listen.backlog = -1
🎜 🎜🎜백로그 번호 -1은 무제한을 의미하며 운영 체제에 따라 결정됩니다. 이 줄을 주석 처리하면 됩니다. 🎜🎜🎜listen.allowed_clients = 127.0.0.1
🎜🎜🎜FastCGI 프로세스의 IP에 대한 액세스를 허용합니다. 다른 호스트에서도 액세스할 수 있도록 nginx를 설정하려면 IP를 제한하지 않도록 설정하세요. 이 FPM 프로세스에서는 수신 위치가 접속 가능한 로컬 IP로 설정되어야 합니다. 기본값은 임의입니다. 각 주소는 쉼표로 구분됩니다. 설정하지 않거나 비어 있으면 모든 서버에서 연결을 요청할 수 있습니다🎜🎜🎜listen.owner = www listening.group = www listening.mode = 0666
🎜🎜🎜 unix 소켓 설정 옵션, tcp를 사용하여 액세스하는 경우 여기에 주석을 달아주세요. 🎜🎜🎜user = www group = www
🎜🎜🎜프로세스를 시작하는 계정 및 그룹🎜🎜🎜php-fpm 프로세스 풀 최적화 방법🎜🎜pm = 동적
🎜🎜🎜전용 서버의 경우 pm을 정적으로 설정할 수 있습니다.
하위 프로세스를 제어하는 방법에는 정적 및 동적 옵션이 있습니다. static을 선택한 경우 pm.max_children에 의해 고정된 수의 하위 프로세스가 지정됩니다. 동적을 선택한 경우 다음 매개변수에 의해 결정됩니다: 🎜🎜🎜pm.max_children
🎜🎜🎜정적 모드에서 열리는 php-fpm 프로세스 수는 최대 수를 제한합니다. php-fpm 프로세스 수입니다. (여기서 pm.max_spare_servers의 값은 pm.max_children보다 작거나 같을 수 있습니다.)🎜🎜🎜pm.start_servers
🎜🎜🎜PHP 시작 수 -fpm은 동적 모드에서 프로세스를 처리합니다. 🎜🎜🎜pm.min_spare_servers
🎜🎜🎜유휴 프로세스의 최소 수를 보장하세요. 유휴 프로세스가 이 값보다 작으면 새 하위 프로세스🎜🎜🎜pm.max_spare_servers를 생성하세요. 코드>🎜<ul>
<li>유휴 프로세스의 최대 수를 보장합니다. 유휴 프로세스가 이 값보다 크면 정리됩니다. </li>
<li>dm이 정적으로 설정된 경우 pm.max_children 매개변수만 적용됩니다. 시스템은 매개변수에 의해 설정된 수의 php-fpm 프로세스를 엽니다. php-fpm 프로세스는 아마도 20m-40m의 메모리를 차지하므로 숫자 크기 설정은 실제 메모리 크기에 따라 설정되어야 합니다. 또한 데이터베이스, 시스템 프로세스 등과 같은 다른 메모리 점유에도 주의를 기울여야 합니다. , 위의 4개 매개변수의 설정 값을 결정합니다! </li>
<li>dm이 동적으로 설정되면 4개 매개변수가 모두 적용됩니다. php-fpm이 실행되기 시작하면 시스템은 pm.start_servers php-fpm 프로세스를 시작한 다음 시스템 필요에 따라 pm.min_spare_servers와 pm.max_spare_servers 사이의 php-fpm 프로세스 수를 동적으로 조정합니다. 매개변수에서는 pm.start_servers 값이 pm.min_spare_servers와 pm.max_spare_servers 사이에 있어야 합니다. </li>
</ul>
<p><code>pm.max_requests = 1000
pm.status_path /status
pm.status_path = /status
ping.path = /ping
ping.response = pong
request_terminate_timeout = 0
request_slowlog_timeout = 10s
slowlog = log/$pool.log.slow
rlimit_files = 1024
rlimit_core = 0
chroot =
chdir =
catch_workers_output = yes
clear_env = no
ping.path = /ping<h3 class="heading" data-id="heading-3"></h3>
<p>FPM 모니터링 페이지의 핑 URL이 설정되어 있지 않으면 핑 페이지에 접근할 수 없습니다. 이 페이지는 FPM이 살아 있는지 여부와 요청에 응답할 수 있는지 확인하는 데 사용됩니다. 슬래시(/)로 시작해야 합니다. </p>
<h3 class="heading" data-id="heading-4"></h3>
<code>ping.response = pong
pm.max_requests = 1000
request_slowlog_timeout = 10s
slowlog = log/$pool.log.slow
🎜🎜🎜request_slowlog_timeout🎜🎜🎜rlimit_files = 1024
🎜🎜🎜와 함께 사용되는 느린 요청 로그 파일 열기 설명자 기본값: 기본 열기 핸들의 시스템 정의 값은 1024이며, ulimit -n을 사용하여 볼 수 있고 ulimit -n 2048로 수정할 수 있습니다. 🎜🎜🎜rlimit_core = 0
🎜🎜🎜최대 코어 제한 값을 설정합니다. 사용 가능한 값: '무제한', 0 또는 양의 정수. 기본값: 시스템 정의 값. chroot = chdir =
🎜🎜🎜Set 정의된 디렉터리는 절대 경로여야 합니다. 기본값: 현재 디렉터리 또는 /directory(chroot인 경우) 🎜🎜🎜catch_workers_output = yes
🎜🎜🎜Redirect 실행 중인 프로세스 중 stdout 및 stderr은 기본 오류 로그 파일로 전송됩니다. 설정하지 않으면 FastCGI 규칙에 따라 stdout 및 stderr이 /dev/null로 리디렉션됩니다.`🎜 🎜🎜clear_env = no
🎜🎜🎜환경 정리🎜🎜🎜variables_order🎜🎜variables_order 매개변수에 대한 자세한 내용은 다른 글 URL: juejin.im/post/5c4eea… 🎜🎜일반적인 오류 및 해결 방법 organized🎜🎜Request timeout abort time 🎜🎜🎜request_terminate_timeout 값이 설정되지 않았거나 0으로 설정하거나 너무 길게 설정하면 PHP 스크립트가 계속 실행될 수 있습니다. 이러한 방식으로 모든 php-cgi 프로세스가 file_get_contents() 함수에 정체되면 이 Nginx+PHP 웹서버는 더 이상 새로운 PHP 요청을 처리할 수 없으며 Nginx는 사용자에게 "502 잘못된 게이트웨이"를 반환합니다. 설정하다
그러나 근본 원인보다는 증상을 치료하려면 PHP 스크립트의 최대 실행 시간이 필요합니다. 예를 들어 30s로 변경하면 file_get_contents()가 웹 페이지 콘텐츠를 얻는 속도가 느리다면 이는 150개의 php-cgi 프로세스가 초당 5개의 요청만 처리할 수 있다는 의미이며 WebServer에서도 "502 Bad"를 피하기가 어렵습니다. 게이트웨이". 해결책은 request_terminate_timeout을 10초 또는 합리적인 값으로 설정하거나 file_get_contents에 시간 초과 매개변수를 추가하는 것입니다! 🎜🎜🎜max_requests 매개변수가 잘못 구성되었습니다. 🎜🎜🎜🎜max_requests 매개변수가 제대로 구성되지 않아 간헐적으로 502 오류가 발생할 수 있습니다. 🎜🎜
각 하위 프로세스가 다시 태어나기 전에 제공되는 요청 수를 설정합니다. 메모리 누수가 있을 수 있는 타사 모듈에 매우 유용합니다. '0'으로 설정하면 요청이 항상 PHP_FCGI_MAX_REQUESTS 환경 변수와 동일합니다. 값: 0. 이 구성은 PHP-CGI 프로세스에서 처리한 요청 수가 500개에 도달하면 프로세스가 자동으로 다시 시작됨을 의미합니다.
그런데 프로세스를 다시 시작하는 이유는 무엇인가요?
일반적으로 프로젝트에서는 일부 타사 라이브러리를 어느 정도 사용하게 됩니다. 이러한 타사 라이브러리에는 종종 메모리 누수 문제가 발생합니다. PHP-CGI 프로세스를 정기적으로 다시 시작하지 않으면 메모리 사용량이 필연적으로 증가합니다. . 따라서 PHP-FPM은 PHP-CGI의 관리자로서 메모리 사용량이 증가하지 않도록 일정 횟수 요청한 PHP-CGI 프로세스를 다시 시작하는 모니터링 기능을 제공합니다.
request_slowlog_timeout은 시간 초과 매개변수를 설정하고, Slowlog는 느린 로그의 저장 위치를 설정합니다. tail -f /var/log/www.slow.log PHP 프로세스가 너무 느리게 실행되고 있습니다. 과도한 네트워크 읽기와 느린 MySQL 쿼리의 일반적인 문제를 확인할 수 있습니다. 프롬프트 정보에 따라 문제를 해결하면 명확한 방향이 표시됩니다.
추천 튜토리얼: "php 튜토리얼"
위 내용은 PHP7의 php.ini, php-fpm 및 www.conf 구성에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!