php-fpm의 max_children 구성에 대한 자세한 설명
이제 nginx + fpm은 기본적으로 주류 구성이 되었으며, 그 중 pm.max_chindren
우선 설정에 주의를 기울입니다: pm = static/dynamic, <code>pm = static/dynamic
,
这个选项是标识fpm子进程的产生模式:
static :表示在fpm运行时直接fork出pm.max_chindren
个worker进程
dynamic:表示,运行时fork出start_servers
个进程,随着负载的情况,动态的调整,最多不超过max_children个进程。
一般推荐用static,优点是不用动态的判断负载情况,提升性能,缺点是多占用些系统内存资源。
上面的告诉我们max_chindren代表的worker的进程数。普遍认为,这个配置越多能同时处理的并发也就越多,这是一个比较大的误区:
- 1) 其实进程多了,增加进程切换的开销,更核心的是,能并发执行的fpm进程不会超过cpu个数。通过多开worker的个数来提升qps, 是错误的理解,不会说你多开了几个进程,就多出几个cpu来处理。
- 2) worker进程开少了,如果server比较繁忙的话,会导到nginx把数据打到fpm的时候,发现所有的woker都在工作中,没有空闲的worker来接受请求,从而导致502。
- 3) 在实际业务中,由于我们有很多的i/o操作,比如读取数据库,或者内部rpc调用这类在等待i/o的过程中,进程会被系统sleep, 而不占用cpu,如果配置worker少了,也会导致cpu利用不上
那worker数到底该怎么配置呢?
理论上woker进程数=cpu的个数是最合理的,但由于第2点,可能每个worker都没处理完请求,这样,就会频现502了。但多开进程,只是说避免502,暂时把请求hang住,但这只是缓解之道,实际上这不但不会增加系统的并发,而且会加重系统的负荷,所以,基于2,3 ,设置一个合理的worker数就比较重要了。
天下武功,唯快不破,只有尽可能的提升程序的效率,把单个请求的时间压缩到最低,这样,单个worker的处理时间变短了,那在单位时间里能处理的请求自然就多了。
那么可以通过每个worker在单位时间内处理的请求数来预估max_children
的个数。假如最大的一个请求的处理时间(xhprof里看cpu时间)是100ms内,而在100ms之内同时有100个请求过来,那了理论上就需要配置100个worker进程,先把请求给hang住。
但最大的请求耗时可能会受很多外在的情况影响,不太好预估,尤其是网络i/o也算在里面,我们可以借用第三方的profile工具,比如xhprof, 这类工具可以统计cpu的耗时,通过这个时间来计算真正的worker数量,比总时间来计算要合理很多,其实这里有一个捷径,来配置你的max_children数, 就是你前期先把max_childnren设置成一个比较大的值,稳定运行一段时间后,观察fpm的status里的 max active processes
일반적으로 정적을 사용하는 것이 좋습니다. 부하 상황을 동적으로 확인할 필요가 없다는 장점이 있고, 시스템 메모리 리소스를 더 많이 차지한다는 단점이 있습니다. 🎜🎜위는 max_chindren이 나타내는 작업자 프로세스 수를 알려줍니다. 일반적으로 이 구성이 동시에 처리할 수 있는 동시성이 많을수록 이는 상대적으로 큰 오해입니다. 🎜static:fpm이 실행 중일 때 pm.max_chindren 작업자 프로세스 동적:은
start_servers
프로세스가 런타임 중에 분기되고 로드에 따라 동적으로 조정된다는 의미입니다. max_children 프로세스 이하로 제한합니다.
- 1) 실제로 프로세스가 많아지면 프로세스 전환 비용이 더 많이 증가합니다. 중요한 것은 동시에 실행될 수 있는 fpm 프로세스 수가 CPU 수를 초과하지 않는다는 것입니다. 더 많은 작업자를 열어서 QPS를 높이는 것은 잘못된 이해입니다. 더 많은 프로세스를 열면 처리할 CPU가 더 많아진다는 의미는 아닙니다.
- 2) 서버가 사용량이 많으면 nginx가 데이터를 fpm에 도달하게 되며 모든 작업자가 작업 중이고 수락할 유휴 작업자가 없는 것으로 확인됩니다. 요청하면 502가 발생합니다.
- 3) 실제 비즈니스에서는 I/O를 기다리는 동안 데이터베이스 읽기나 내부 RPC 호출 등의 I/O 작업이 많기 때문에 프로세스는 시스템을 점유하지 않고 절전 모드로 전환됩니다. CPU, 워커를 적게 구성하면 CPU를 활용하지 못하게 됩니다
max_children
수는 단위 시간당 각 작업자가 처리하는 요청 수로 추정할 수 있습니다. 가장 큰 요청의 처리 시간(xhprof의 CPU 시간)이 100ms 이내이고 100ms 이내에 100개의 요청이 동시에 들어오는 경우 이론적으로 요청을 먼저 정지하려면 100개의 작업자 프로세스를 구성해야 합니다. 🎜🎜그러나 최대 요청 시간은 많은 외부 상황에 의해 영향을 받을 수 있으며 예측하기 어렵습니다. 특히 네트워크 I/O도 포함되어 있습니다. xhprof 등과 같은 타사 프로필 도구를 빌릴 수 있습니다. CPU 시간을 계산할 수 있습니다. 그리고 이 시간을 이용해 실제 작업자 수를 계산하는데, 이는 총 시간보다 훨씬 합리적입니다. 실제로 여기에는 max_children 수를 구성하는 지름길이 있는데, 이는 초기 단계에서 max_children을 상대적으로 큰 값으로 설정하는 것입니다. 일정 시간 동안 안정적으로 실행한 후 fpm 상태에서 max active process
를 관찰한 후 max_children을 그보다 크게 설정하면 괜찮습니다. 🎜🎜🎜관련 학습 권장 사항: 🎜초보부터 마스터까지 PHP 프로그래밍🎜🎜🎜위 내용은 php-fpm의 max_children 구성에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











고성능 튜닝을 위해 php-fpm을 사용하는 방법 PHP는 웹 애플리케이션 및 동적 웹 사이트를 개발하는 데 널리 사용되는 매우 널리 사용되는 서버 측 스크립팅 언어입니다. 그러나 트래픽이 증가하면 PHP 애플리케이션의 성능이 저하될 수 있습니다. 이 문제를 해결하기 위해 고성능 튜닝을 위해 php-fpm(FastCGIProcessManager)을 사용할 수 있습니다. 이 기사에서는 php-fpm을 사용하여 PHP 애플리케이션의 성능을 향상시키는 방법을 소개하고 코드 예제를 제공합니다. 하나,

PrestaShop 애플리케이션의 성능을 향상시키기 위해 PHP-FPM 최적화를 사용하는 방법 전자상거래 산업의 급속한 발전으로 PrestaShop은 많은 판매자가 선택하는 전자상거래 플랫폼이 되었습니다. 그러나 매장 규모가 커지고 방문 횟수가 늘어나면서 PrestaShop 애플리케이션에 성능 병목 현상이 발생할 수 있습니다. PrestaShop 애플리케이션의 성능을 향상시키기 위한 일반적인 방법은 PHP-FPM을 사용하여 애플리케이션의 처리 기능을 최적화하고 향상시키는 것입니다. PHP-FPM(FastCGI

PHP-FPM 최적화를 사용하여 WooCommerce 응용 프로그램의 성능을 향상시키는 방법 개요 WooCommerce는 WordPress 웹 사이트에서 온라인 상점을 만들고 관리하기 위한 매우 인기 있는 전자 상거래 플러그인입니다. 그러나 매장이 성장하고 트래픽이 증가하면 WooCommerce 앱이 느려지고 불안정해질 수 있습니다. 이 문제를 해결하기 위해 PHP-FPM을 사용하여 WooCommerce 애플리케이션의 성능을 최적화하고 향상시킬 수 있습니다. PHP-FP 란 무엇입니까?

데이터베이스 액세스 성능을 향상시키기 위한 php-fpm 연결 풀 사용 개요: 웹 개발에서 데이터베이스 액세스는 가장 빈번하고 시간이 많이 걸리는 작업 중 하나입니다. 전통적인 방법은 각 데이터베이스 작업에 대해 새 데이터베이스 연결을 생성한 다음 사용 후 연결을 닫는 것입니다. 이 방법을 사용하면 데이터베이스 연결이 자주 설정되고 닫혀 시스템 오버헤드가 증가합니다. 이 문제를 해결하기 위해 php-fpm 연결 풀 기술을 사용하여 데이터베이스 액세스 성능을 향상시킬 수 있습니다. 연결 풀의 원리: 연결 풀은 일정 수의 데이터베이스를 결합하는 캐싱 기술입니다.

PHP-FPM은 더 나은 PHP 성능과 안정성을 제공하기 위해 일반적으로 사용되는 PHP 프로세스 관리자입니다. 그러나 부하가 높은 환경에서는 PHP-FPM의 기본 구성이 요구 사항을 충족하지 못할 수 있으므로 이를 조정해야 합니다. 이 기사에서는 PHP-FPM의 튜닝 방법을 자세히 소개하고 몇 가지 코드 예제를 제공합니다. 1. 프로세스 수를 늘리십시오. 기본적으로 PHP-FPM은 요청을 처리하기 위해 소수의 프로세스만 시작합니다. 부하가 높은 환경에서는 프로세스 수를 늘려 PHP-FPM의 동시성을 높일 수 있습니다.

Phalcon 애플리케이션의 성능을 최적화하고 향상시키기 위해 PHP-FPM을 사용하는 방법 소개: Phalcon은 고성능 PHP 프레임워크로, PHP-FPM과 결합하면 애플리케이션 성능을 더욱 향상시킬 수 있습니다. 이 글에서는 PHP-FPM을 사용하여 Phalcon 애플리케이션의 성능을 최적화하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. PHP-FPMPHP-FPM(PHPFastCGIProcessManager)이란 웹 서버와 독립적인 PHP 프로세스입니다.

php-fpm이란 무엇입니까? 다음 기사에서는 php-fpm을 이해하고 php-fpm을 최적화할 때 최적화해야 할 사항을 소개합니다. 모든 사람에게 도움이 되기를 바랍니다.

php-fpm이 없는 Ubuntu용 솔루션: 1. "sudo apt-get" 명령을 실행하여 PHP의 소스 주소를 추가합니다. 2. php7 패키지가 있는지 확인합니다. 3. "sudo apt-get"을 실행하여 PHP를 설치합니다. install" 명령; 4. nginx 요청을 처리하기 위해 포트 9000에서 수신 대기하도록 구성을 수정합니다. 5. "sudo service php7.2-fpm start"를 통해 "php7.2-fpm"을 시작합니다.
