이 글에서는 주로 Linux에서 php-fpm의 일부 중요한 매개변수에 대한 중국어 상세 설명을 설명하고, 성능 측면에서 php-fpm의 매개변수 최적화를 자세히 소개합니다.
php-fpm.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 = 통지
#오류 수준은 경고(즉시 처리해야 함)입니다. ), error(오류 상황), warning(경고 상황), 통지(일반적인 중요 정보), 디버그(디버깅 정보). 기본값: 통지.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
#php- Emergency_restart_interval에 설정된 값 내에서 SIGSEGV 또는 SIGBUS 오류가 있는 cgi 프로세스. Emergency_restart_threshold가 초과되면 php-fpm이 정상적으로 다시 시작됩니다. 이 두 가지 옵션은 일반적으로 기본값으로 유지됩니다.
process_control_timeout = 0
#주 프로세스의 재사용 신호를 승인하기 위한 하위 프로세스의 시간 초과를 설정합니다. 사용 가능한 단위: s(초), m(분), h(시간) 또는 d(일) 기본값 단위: s(초). 기본값: 0.
daemonize = yes
#Execute fpm 기본값은 yes이며 디버깅을 위해 no로 변경할 수 있습니다. FPM에서는 서로 다른 설정으로 여러 프로세스 풀을 실행할 수 있습니다. 이러한 설정은 각 프로세스 풀에 대해 개별적으로 설정할 수 있습니다.
listen = 127.0.0.1:9000
#fpm 수신 포트, 이는 nginx에서 PHP가 처리하는 주소입니다. 일반적으로 기본값이면 충분합니다. 사용 가능한 형식은 'ip:port', 'port', '/path/to/unix/socket'입니다. 각 프로세스 풀을 설정해야 합니다.
listen.backlog = -1
#Backlog 번호, -1 운영 체제에 따라 무제한을 나타냅니다. 이 줄을 주석 처리하면 됩니다.
listen.allowed_clients = 127.0.0.1
#FastCGI 프로세스의 IP에 대한 액세스를 허용합니다. 다른 호스트에서도 이 FPM 프로세스에 액세스할 수 있도록 nginx를 설정하려면 청취를 설정해야 합니다. 로컬로 액세스할 수 있는 IP입니다. 기본값은 임의입니다. 각 주소는 쉼표로 구분됩니다. 설정하지 않거나 비어 있으면 모든 서버에서 연결을 요청할 수 있습니다.
listen.owner = www
listen.group = www
listen.mode = 0666
#unix 소켓 설정 옵션 if 접속하려면 tcp를 사용하세요. 여기에 댓글을 달아주세요.
user = www
group = www
#프로세스를 시작하려면 계정 및 그룹
pm = 동적
#전용 서버의 경우 pm을 정적으로 설정할 수 있습니다.
#하위 프로세스를 제어하는 방법은 정적 및 동적 옵션이 있습니다. static을 선택한 경우 pm.max_children에 의해 고정된 수의 하위 프로세스가 지정됩니다. 동적을 선택한 경우 다음 매개변수에 의해 결정됩니다.
pm.max_children #, 최대 하위 프로세스 수
pm.start_servers #, 시작 시 프로세스 수
pm.min_spare_servers #, 유휴 프로세스의 최소 수를 확인하십시오. 유휴 프로세스가 이 값보다 작으면 새 하위 프로세스
pm.max_spare_servers #를 생성하여 유휴 프로세스의 최대 수를 보장하고 유휴 프로세스가 이 값보다 큰 경우 clean it up
pm.max_requests = 1000
# 각 하위 프로세스가 다시 태어나기 전에 제공되는 요청 수를 설정합니다. 메모리 누수가 있을 수 있는 타사 모듈에 유용합니다. '0'으로 설정하면 요청이 항상 발생합니다. 허용됩니다. PHP_FCGI_MAX_REQUESTS 환경 변수와 동일합니다. 기본값: 0.
pm.status_path = /status
#설정되지 않은 경우 상태 페이지에 액세스할 수 없습니다. 모니터링은
ping.path = /ping
#FPM을 사용합니다. 모니터링 페이지의 핑 URL을 설정하지 않으면 이 페이지는 FPM이 살아 있고 응답할 수 있는지 외부적으로 감지하는 데 사용됩니다. 요청 시 슬래시(/)로 시작해야 합니다.
ping.response = pong
#ping 요청의 반환 응답을 정의하는 데 사용됩니다. 반환되는 텍스트/일반 형식 텍스트는 HTTP 200입니다. 기본값: pong.
request_terminate_timeout = 0
#시간 초과 설정 단일 요청 중단 시간의 경우 이 옵션은 php.ini 설정의 'max_execution_time'이 특별한 이유로 실행 중인 스크립트를 중단하지 않는 경우 유용할 수 있습니다. 이 옵션을 'Off'로 설정하면 됩니다. 502에러가 자주 발생하는 경우 옵션입니다.
request_slowlog_timeout = 10s
#요청이 타임아웃 기간을 설정하면 해당 PHP 호출 스택 정보가 느린 로그에 완전히 기록됩니다. '0'으로 설정하면 '해제'를 의미합니다
slowlog = log/$pool.log.slow
#request_slowlog_timeout과 함께 사용되는 느린 요청 로깅
rlimit_files = 1024# 🎜🎜##파일 열기 설명자의 rlimit 제한을 설정합니다. 기본값: 기본 열기 핸들의 시스템 정의 값은 1024이며, ulimit -n을 사용하여 볼 수 있고 ulimit -n 2048로 수정할 수 있습니다.
rlimit_core = 0#최대 코어 제한 값을 설정합니다. 사용 가능한 값: '무제한', 0 또는 양의 정수 기본값: 시스템 정의.
chroot =#Chroot 디렉터리를 설정하지 않으면 chroot가 사용되지 않습니다. #🎜 🎜#
#시작 중에 자동으로 경로가 지정되는 시작 디렉터리를 설정합니다. 정의된 디렉터리는 절대 경로여야 합니다. 현재 디렉터리 또는 /directory(chrooting 시)
#실행 프로세스 중 stdout 및 stderr을 기본 오류 로그 파일로 리디렉션합니다. 설정되지 않은 경우 stdout 및 stderr은 FastCGI 규칙에 따라 /dev/null로 리디렉션됩니다. 기본값: 비어 있습니다. ;
dynamic은 php-fpm의 수를 의미합니다. 프로세스는 pm.start_servers에 지정된 수부터 시작하여 자동으로 증가하며 유휴 프로세스 수는 pm.min_spare_servers 이상입니다. 중복 프로세스 수가 pm.max_spare_serversstatic
을 초과하지 않도록 적절히 정리합니다. php-fpm 프로세스 수가 정적임을 나타냅니다. 프로세스는 항상 pm.max_children에 지정된 숫자이며 더 이상 증가하거나 감소하지 않습니다.pm.max_children = 300;
Static 동적에서 시작된 php-fpm 프로세스 수 mode
pm.start_servers = 20;
pm.min_spare_servers = 5; 동적 모드의 최소 php-fpm 프로세스 수
pm.max_spare_servers = 35;동적 모드의 최대 php-fpm 프로세스 수#🎜 🎜#pm이 다음과 같은 경우 정적이면 pm.max_children 매개변수만 적용됩니다. 시스템은 설정된 수의 php-fpm 프로세스를 엽니다
pm이 동적인 경우 pm.max_children 매개변수는 유효하지 않으며 다음 세 매개변수가 적용됩니다. php-fpm이 실행되기 시작하면 시스템은 pm.start_servers php-fpm 프로세스를 시작한 다음 시스템의 필요에 따라 pm.min_spare_servers와 pm.max_spare_servers 사이의 php-fpm 프로세스 수를 동적으로 조정합니다#🎜 🎜# 그렇다면 우리 서버에는 어떤 PM 방식이 더 좋을까요? 실제로 Apache와 마찬가지로 실행 중인 PHP 프로그램도 실행 후 메모리 누수가 발생합니다. 이는 php-fpm 프로세스가 처음에는 약 3M의 메모리만 차지하며 일정 기간 실행된 후에는 20-30M로 증가하는 이유이기도 합니다. 대용량 메모리(예: 8G 이상)가 있는 서버의 경우 실제로는 정적 max_children을 지정하는 것이 더 적절합니다. 이렇게 하면 추가 프로세스 번호 제어가 필요하지 않고 효율성이 향상되기 때문입니다. php-fpm 프로세스를 자주 전환하면 지연이 발생하므로 메모리가 충분히 크면 정적 효과가 더 좋습니다. 메모리/30M에 따라 수량을 얻을 수도 있습니다. 예를 들어 8GB 메모리를 100으로 설정하면 php-fpm에서 소비하는 메모리를 2G-3G로 제어할 수 있습니다. 메모리가 1G와 같이 약간 더 작은 경우에는 프로세스 수를 고정적으로 지정하는 것이 서버 안정성에 더 도움이 됩니다. 이렇게 하면 php-fpm이 충분한 메모리만 확보하고 다른 응용 프로그램에 사용할 수 있도록 소량의 메모리를 할당하여 시스템이 보다 원활하게 실행되도록 할 수 있습니다. nginx php-fpm 구성 과정에서 가장 큰 문제는 내부 누수입니다. 서버에 걸리는 부하가 크지 않은데 메모리 사용량이 급격히 늘어나서 메모리를 빠르게 잡아먹다가 스왑 파티션을 잡아먹기 시작합니다. 시스템이 빠르게 중단됩니다! 실제로 공식 소개에 따르면 php-cgi에는 메모리 누수가 없습니다. 각 요청이 완료된 후 php-cgi는 메모리를 회수하지만 이를 운영 체제에 해제하지는 않습니다. 이로 인해 많은 양의 메모리가 발생하게 됩니다. php-cgi가 차지하게 됩니다. 공식적인 해결책은 PHP_FCGI_MAX_REQUESTS의 값을 낮추는 것입니다. php-fpm을 사용하는 경우 해당 php-fpm.conf는 다시 시작하기 전에 전송되는 요청 수를 의미합니다. 이 스레드에서는 php-fpm이 자동으로 메모리를 해제할 수 있도록 이 값을 적절하게 낮춰야 합니다. 이는 대부분의 사람들이 인터넷에서 말하는 것처럼 51200이 아닙니다. 실제로 이와 관련된 또 다른 값인 max_children이 있습니다. time php -fpm으로 생성되는 프로세스 수, 실제 메모리 소비량은 각 요청에 사용되는 max_children*max_requests*memory입니다. 이를 기반으로 메모리 사용량을 추정할 수 있으므로 스크립트를 작성할 필요가 없습니다. 죽이다. request_terminate_timeout = 30; 최대 실행 시간은 php.ini에서도 구성할 수 있습니다(max_execution_time) request_slowlog_timeout = 2; 느린 로그 켜기 관심을 가질 만한 기사 #🎜 🎜#Laravel에서 데이터 마이그레이션 및 데이터 채우기를 위한 세부 단계
PHP 클로저는 외부 변수와 전역 키를 얻습니다. 단어 선언 변수의 차이점 설명
256M 메모리를 탑재한 VPS 등 메모리가 작은 서버의 경우, 20M 메모리를 기준으로 계산하더라도 10개의 php-cgi 프로세스가 200M의 메모리를 소비하게 되어 시스템이 충돌하게 됩니다. 정상이어야 합니다. 따라서 php-fpm 프로세스 수를 최대한 조절하도록 노력해야 하며, 다른 응용 프로그램이 차지하는 메모리를 대략적으로 파악한 후 고정적으로 작은 숫자를 할당하면 시스템이 더 안정적으로 됩니다. 또는 동적 모드를 사용하세요. 동적 모드는 중복된 프로세스를 종료하고 일부 메모리를 재활용하고 해제할 수 있으므로 메모리가 적은 서버나 VPS에서 사용하는 것이 좋습니다. 구체적인 최대량은 메모리/20M 기준으로 구해집니다. 예를 들어 512M VPS의 경우 pm.max_spare_servers를 20으로 설정하는 것이 좋습니다. pm.min_spare_servers는 서버의 부하에 따라 5~10 사이로 설정하는 것이 더 적합합니다.
4G 메모리 서버에서는 200이면 충분합니다(저의 1G 테스트 머신에서는 64가 가장 좋습니다. 최고의 가치를 얻으려면 스트레스 테스트를 사용하는 것이 좋습니다) # 🎜🎜#pm.max_requests = 10240;
slowlog = log/$pool.log.slow #rlimit_files = 1024; php-fpm으로 여는 파일 설명자 수 제한
위 내용은 php-fpm 매개변수 구성 소개 및 Linux에서의 매개변수 최적화에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!