>  기사  >  백엔드 개발  >  Linux_php 기술에 따른 php-fpm 매개변수 구성 및 매개변수 최적화 지침 소개

Linux_php 기술에 따른 php-fpm 매개변수 구성 및 매개변수 최적화 지침 소개

韦小宝
韦小宝원래의
2017-12-04 11:56:161312검색

이 글에서는 주로 Linux에서 php-fpm의 일부 중요한 매개변수에 대한 중국어 상세 설명을 설명하고, php-fpm의 매개변수 최적화에 대해 자세히 소개합니다. php-fpm의 성능을 살펴보겠습니다. Aspect를 소개하겠습니다

php-fpm.conf 중요 매개변수

pid = run/php-fpm.pid
#pid 설정, 기본값은 설치에서 var/run/php-입니다. fpm.pid 디렉토리,

error_log = log/php-fpm.log
#오류 로그를 활성화하는 것이 좋습니다. 기본값은 설치 디렉토리

log_level의 var/log/php-fpm.log입니다. = 통지# 사용 가능한 오류 수준은 경고(즉시 처리해야 함), 오류(오류 상황), 경고(경고 상황), 알림(일반적인 중요 정보), 디버그(디버깅 정보)입니다.

emergency_restart_threshold = 60 Emergency_restart_interval = 60s
# Emergency_restart_interval 값 내에서 SIGSEGV 또는 SIGBUS 오류가 있는 php-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에 대한 액세스를 허용합니다. 다른 호스트의 nginx도 이 FPM 프로세스에 액세스하도록 설정하려면 청취를 설정해야 합니다. 로컬로 액세스할 수 있는 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'이 특별한 이유로 실행 중인 스크립트를 중단하지 않는 경우 유용할 수 있습니다. 이를 '끄기'를 의미하려면 '0'으로 설정하세요. 502 오류가 자주 발생하는 경우 옵션입니다.

request_slowlog_timeout = 10s
#요청이 타임아웃 기간으로 설정되면 해당 PHP 호출 스택 정보가 완전히 느린 로그에 기록됩니다. '0'으로 설정하면 'Off'

slowlog = log / $pool.log.slow
#request_slowlog_timeout과 함께 사용되는 느린 요청 로깅

rlimit_files = 1024
#파일 열기 설명자의 rlimit 제한 설정 기본값: 기본 열기 가능 핸들의 시스템 정의 값은 1024입니다. , ulimit -n을 사용하여 보거나 ulimit -n 2048을 사용하여 수정할 수 있습니다.

rlimit_core = 0
#코어 rlimit의 최대 제한 값을 설정합니다. 사용 가능한 값: '무제한', 0 또는 양수 integer 기본값: 시스템 정의 값.

chroot =
#At 시작 Chroot 디렉터리. 정의된 디렉터리는 절대 경로여야 합니다. 설정하지 않으면 chroot가 사용되지 않습니다.

chdir =
#시작 시 자동으로 이 디렉터리로 이동됩니다. 디렉토리는 절대 경로여야 합니다. 기본값: 현재 디렉토리 또는 / 디렉토리(chrooting 시)

catch_workers_output = yes
#설정되지 않은 경우 stdout 및 stderr을 기본 오류 로그 파일로 리디렉션합니다. stderr는 FastCGI 규칙에 따라 /dev/null로 리디렉션됩니다. 기본값: 비어 있음.

php-fpm 매개변수 조정

pm =

사용할 프로세스 번호 관리 방법을 나타냅니다.

dynamic은 php-fpm 프로세스 수가 동적임을 의미합니다. 요청이 더 많으면 유휴 프로세스 수가 다음보다 적지 않도록 자동으로 증가합니다. pm.min_spare_servers. 프로세스 수가 더 많은 경우 중복 프로세스 수가 pm.max_spare_servers

static을 넘지 않도록 해당 정리가 수행됩니다. 이는 php-fpm 프로세스 수가 임을 의미합니다. static 프로세스 수는 항상 pm.max_children에 지정된 수입니다. 그런 다음 늘리거나 줄입니다.

pm.max_children = 300 정적 모드에서 시작된 php-fpm 프로세스 수
pm.start_servers = 20; 동적 모드에서 시작하는 php-fpm 프로세스 수
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이 충분한 메모리만 확보하고 다른 응용 프로그램에 사용할 수 있도록 소량의 메모리를 할당하여 시스템이 보다 원활하게 실행되도록 할 수 있습니다.

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;

nginx php- fpm 구성 과정 중 가장 큰 문제는 내부 누수입니다. 서버의 로드는 크지 않지만 메모리 사용량이 급격히 증가합니다. 메모리를 빠르게 소모한 다음 스왑 파티션을 먹기 시작하고 시스템이 빠르게 중단됩니다! 실제로 공식 소개에 따르면 php-cgi에는 메모리 누수가 없습니다. 각 요청이 완료된 후 php-cgi는 메모리를 회수하지만 이를 운영 체제에 해제하지는 않습니다. 이로 인해 많은 양의 메모리가 발생하게 됩니다. php-cgi가 차지합니다.

공식적인 해결책은 PHP_FCGI_MAX_REQUESTS의 값을 낮추는 것입니다. php-fpm을 사용하는 경우 해당 php-fpm.conf는 max_requests입니다. 이 값은 스레드가 다시 시작되기 전에 전송될 요청 수를 의미합니다. php-fpm이 자동으로 메모리를 해제할 수 있도록 이 값을 적절하게 낮추십시오. 대부분의 사람들이 인터넷에서 말하는 것처럼 51200이 아닙니다. 실제로 이와 관련된 또 다른 값인 max_children이 있습니다. 프로세스마다 생성되므로 실제 메모리 소비량은 max_children*max_requests*각 요청에 사용된 메모리입니다. 이를 기반으로 메모리 사용량을 추정할 수 있으므로 종료하기 위한 스크립트를 작성할 필요가 없습니다.

request_terminate_timeout = 30;

최대 실행 시간은 php.ini에서도 구성할 수 있습니다(max_execution_time)

request_slowlog_timeout = 2; 느린 로그 활성화
slowlog = log/$pool.log.slow; 느림 로그 경로

rlimit_files = 1024; php-fpm의 열린 파일 설명자 제한을 늘립니다.

php-fpm.conf의 매개변수는 명확하게 명시되어 있으므로 몇 번만 읽어도 기억할 수 있습니다. .php-fpm의 성능에 관해서는 실제 상황에 따라 솔루션을 결정해야 합니다. 최상의 구성 솔루션을 얻으려면 여러 번 테스트해야 합니다.

관련 권장 사항:

php-FPM에 대한 자세한 설명 프로세스 풀

PHP-FPM 프로세스 풀 Quest

PHP-FPM 메모리 사용량을 줄이는 솔루션 소개

위 내용은 Linux_php 기술에 따른 php-fpm 매개변수 구성 및 매개변수 최적화 지침 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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