학습 총결산
static 정적 모드, 시작할 때 고정된 수의 worker 프로세스를 만들고 실제 요청이 worker 프로세스보다 클 때 warning
ondemand 온디맨드 방식으로, 부팅 시 worker 프로세스가 생성되지 않으며, 필요에 따라 생성되며, idle_timeout 후 해제됩니다.
이렇게 제때에 접속을 해제하지 못하고 접속을 확립하려면 자원을 소모해야 한다
dynamic 동적 모드 (기본값): 시작할 때 지정한 수의 worker 프로세스를 만들고, 상황에 맞는 worker를 만들고, worker를
PHP-FPM & FastCGI
1.PHP-FPM(FastCGI) Process Manager)는 PHPFastCGI 프로세스 매니저로 영어 이름과 정의에서 알 수 있듯이 FPM의 핵심 기능은 프로세스 관리입니다.
2.FastCGI는 일종의 합의로 이해될 수 있다.웹 서버(nginx, Apache)와 프로세스 간의 통신에 사용되는 응용 계층 통신 프로토콜입니다.
3.작동원리는 대략 아래 그림과 같다
fpm의 기본 구현
fpm mast 만들기er 프로세스, master 프로세스에서 work pool을 생성하고 socket을 수신한 다음 fork에서 여러 개의 하위 프로세스(work)를 내보냅니다. 이러한 작업은 부팅 후 fcgi_accept_request()에서 각각 accept 요청을 차단합니다. 요청이 들어오면 worker가 요청 데이터를 읽기 시작합니다. 읽기 완료 후 처리를 다시 시작합니다. 이 기간 동안 fpm의 하위 프로세스는 하나의 요청만 응답할 수 있습니다. 즉, 이 요청 처리가 완료되어야 accept 다음 요청만 응답할 수 있습니다.
fpm의 master과 work 프로세스 간에는 직접 통신이 되지 않습니다. master는 메모리를 공유하여 worker 프로세스의 현재 상태, 처리완료 요청 수 등 worker 프로세스의 정보를 가져옵니다. master가 worker 프로세스를 죽이려고 해도 신호를 보냅니다.
pm 동시 감청 가능php-fpm.conf와 같은 nginx에서 server 개념과 유사한 여러 개의 php-fpm.conf에서 여러 개의 php-fpm.conf를 구성할 수 있습니다.
[web1]
리스텐:127.0.0.1:9000
[web2]
리스텐:127.0.0.1:9001
php 라이프사이클
PHP는 웹쪽에 있습니다.식에서 문서를 어떻게 바꾸면 즉시 효력이 발생한다. 중요한 몇 가지 개념:
● sapi: php엔진의 대외적인 통일된 인터페이스로 이해하면 php는 외부와 섞일 수 있다.부분적인 절차로 상호 작용하다.
● php의 생명주기 중 MINT - > RINT - > RSHUT다운-> MSHUTDOWN
데이터 초기화(mint) ==' 요청 초기화(rint) ==' 컴파일 스크립트(rshu)ntdown) ==' 실행 코드(mshutdown)
● fpm: fAstcgi 프로세스 관리자
FPM 프로세스
fpm은 SAP를 통해i 인터페이스와 php 프로세스 상호 작용
1.fpm시동회각 확장된 MINT 메서드를 호출하여 일부 데이터 초기화(롱-홀드 메모리)를 수행합니다.
2.원하는 대로 다 오세요.먼저 RINT에서 개별 요청 행을 초기화합니다.
3.php 발 실행본(opcode 캐시 없이 php 스크립트가 동적으로 실행됨그래서 php 스크립트를 갱신하면 새로운 php 스크립트가 실행되며 자세한 내용은 여기에 기술하지 않습니다)
4.RSHUTDOWN 실행 방법
5.fpm을 그만둔다면 집착한다.라인MSHUTDOWN
fpm은 모든 요구에 대해 계속 처리한다.2~4단계를 반복하며, 3단계에서 php의 스크립트는 동적으로 실행된다.php 스크립트는 매번 한 번 실행되기 때문에 php 스크립트는 매번 php 파일을 opcode로 번역하는 프로세스(시간이 많이 소요됨)가 있어야 하기 때문에 생기는 opcache 툴이다.
옵캐시
php를 직접 번역한 opcode코드 트리를 공유 메모리에 저장하여 직접 사용할 수 있도록 하여 매번 p를 줄여줍니다.hp를 opcode로 번역하면 오버헤드가 됩니다.
Opcache의 질문: 그에 따라php 파일을 수정했다고 해서 바로 업데이트되는 것은 아니라는 설명이다.
opcache의 솔루션: 하나파일 업데이트 여부를 체크할 수 있는 시간 간격을 설정합니다.2단계 reload 관련 파일을 다시 가져옵니다.
물론, 직접 reload fpm,따라서 php 열업데이트 효과(opcache 확장은 4번째로 가능)스텝 관련 opcode cache를 비운다).
Work 워크플로우
worker의 워크플로우에는 다음이 포함됩니다.단계
1. 요청 대기 중: fcgi_accept_request() 요청이 차단됨
2.요청 수신:fastcgi 요청도착 후 worker에 의해 수신되고 해석되어 완전히 수신될 때까지 method, query, uri 등의 정보를 worker 프로세스의 fpm_scoreboard_proc_s 구조에 저장
3.초기화 요청:php_request_startup( ) 을( 를) 실행합니다. 이 단계는 각 확장된 P를 불러옵니다HP_RINIT_FUNCTION 방법, 일부 조작 초기화
4.요청처리(컴파일, 실행):phphp_execute_scri에서 pc 코드 컴파일 실행pt 메서드 완료
5.닫기 요청: 응답을 반환하고, ph를 실행합니다.p_request_shutdown 메서드 종료 후 진행첫 번째 단계로 들어가서 요청을 기다리십시오. 이 단계는 각 확장된 PHP_RSHUTDOWN_FUNCTION을 수행하여 마무리합니다.
int main(int argc, char *argv[])
{
...변수 정의, 인자 초기화
//SAPI 등록
sapi_startup(&cgi_sapi_module);
...
//실행하다php_module_starup()
if (cgi_sapi_module.startup(&cgi_sapi_module) == FAILURE) {
return FPM_EXIT_SOFTWARE;
}
//초기화
if(0 > fpm_init(...)){
//记录日志并退出
return FPM_EXIT_CONFIG;
}
...
fpm_is_running = 1;//fpm 실행 상태 ID
fcgi_fd = fpm_run(&max_requests);//프로세스 초기화, fork() 불러와 작업 프로세스 만들기
...
fcgi_init_request(&request, fcgi_fd); //초기화 요청;
//이 단계의php_request_startup()모든 확장자를 불러옵니다:PHP_RINIT_FUNCTION();
if (UNEXPECTED(php_request_startup() == FAILURE)) {
...
}
...
php_fopen_primary_script(&file_handle TSRMLS_CC); //스크립트 열기;
...
php_execute_script(&file_handle TSRMLS_CC); //스크립트 실행;
...
//worker프로세스 종료
php_module_shutdown();
...
}
PHP-FPM의 세 가지 모드 실행
PHP7 기본값은
pm=dynamic
pm.max_children=50
fpm.conf 인자
pm.start_servers = 5
동적 방식에서의 시작 php-fpm 프로세스 수
pm이 dyn일 때만 설정amic할 때 효과적 static이면이 매개 변수 무시하기
php 작동 시, 오픈프로세스의 개수. 요청하신 대로 하위 프로세스의 개수입니다.변화가 변하지만 최대 pm.max를 넘지 않는다_children 설정값.
min_spare_servers + (max_spare_se)rvers - min_spare_servers) / 2;
일반적으로 10-2로 설정한다.0 사이의 데이터는 수요를 만족시키기에 충분하다.
pm.max_children = 50
php-fpm이 작동한다는 뜻의 최대 하위 프로세스 수
static 밑에 이거 하나밖에 없어인수가 효력을 나타남
계산 방식
일반적으로 한 대의 서버가 정상 상태일 때 php-cgi당 20M~30M 정도의 내부 존재하므로 나의 "max_children"은 40개로 설정하였으며, 20M*40=800M은 피크 시 모든 PHP-CGI당 800M 이내로 유효 메모리 2Gb보다 낮다는 것을 의미합니다.
내 'max_children'을 5~10개처럼 작게 설치하면 php-cgi가 '힘들다'며 처리 속도도 느리고 대기 시간도 길며 점유 CPU도 높다.
오랫동안 처리되지 않은 요청은 504 Gateway Time-out 오류가 발생하며, 처리 중인 몇 가지 php-cgi에 문제가 생기면 502 Bad gateway 오류가 발생합니다.
max_children 설치방식은 req/s(처리율, 단위시간당 서버 처리 최대 요청수, 단위 req/s)에 따라 설정되며, 프로그램이 100 req/s의 처리능력이라면 100을 설정하는 것이 바람직하며, 이는 동적으로 조정된다.
pm.max_spare_servers
동적 방식 최대 유휴 상태 php-fpm 수
pm.max_spare_servers의 값은 pm.max_children 이하여야 합니다
시스템은 php-fpm 실행이 시작될 때 pm.start_servers개 php-fpm 프로세스를 시작하고 시스템의 요구에 따라 pm.min_spare_servers와 pm.max_spare_servers 사이에서 php-fpm 프로세스 수를 동적으로 조정합니다.
pm.process_idle_timeout = 10s
worker가 몇 초 동안 유휴 상태일 때 kill, 온디맨드 방식 dynamic
기본 10s
pm.max_requests=500
프로세스당 몇 개의 요청을 처리하면 자동으로 종료됩니다. 메모리 오버플로를 방지할 수 있습니다. 0인 경우 자동으로 종료되지 않습니다. 기본값은 0입니다. 메모리 누수가 발생할 수 있는 서드파티 모듈에 유용합니다. '0'으로 설정하면 항상 요청을 수락합니다. PHP_FCGI_MAX_REQUESTS 환경 변수와 동일합니다. 기본값: 0: 0
pm.status_path
등록된 URI로 php-fpm 상태의 통계정보 표시
php-fpm.conf에서 열기
nginx에서 설정하기
server {
......
# 서버에 다음 설정 추가
location = /status {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
.....
}
pool - fpm 풀 하위 이름, 대부분 WWW
process manager - 프로세스 관리자식, 값: static, dynamic or ondemand. dynamic
start time - rel일 경우 시작 날짜oad가 php-fpm이 되면 시간이 갱신됩니다.
start since - 실행 시간
accepted conn - 현재 풀에서 허용됨요청 수
listen que - 대기 행렬 요청( 예)이 값이 0이 아니라면, FPM의 프로세스 수를 늘립니다.
max listen que - 대기 요청대기열이 가장 높은 수
listen queue len – socket 대기 행렬 길이
idle processes - 유휴 프로세스 수
active processes - 활성 프로세스수량
total processes - 총 프로세스 수
max active processes - 최대 활성 프로세스 수(FPM 시작 시작)
max children reached- 프로세스 최대 수 제한 횟수입니다. 이 수가 0이 아니면 최대 프로세스 수가 너무 작음을 의미합니다. 좀 더 크게 해 주십시오.
slow requests - php 활성화됨-fpm slow-log, 느린 요청 수
ping.path
ping url, php-fpm은생존 여부 및 응답 가능
ping.response
pingurl의 응답 본문이 HTTP 2로 반환됨00의 text/plain 형식 텍스트. 기본값: pong.
ping.response= pong
11)pid = run/php-fpm.piD
#pid 설정, 기본 설치 디렉터리에 있는 var/run/php-fpm.pid, 권장 열림
error_log =log/php-fpm.log
#에러 로그, 기본 설치 디렉터리에 있는 var/log/php-fpm.log
log_level = notice
# 오류 수준. 사용 가능한 수준: alert(즉각 처리해야 함), error(오류 상황), warning(경고 상황), notice(일반 중요 정보), debug(디버깅 정보). 기본값: notice
emergency_restart_threshold = 60
emergency_restart_interval = 60s
#emergency_resta에서 표시rt_interval이 설정한 값 내에 SIGSEGV 또는 SIGBUS 오류가 발생한 php-cgi 프로세스 수가 emergency_restart_threshold 개수를 초과하면 php-fpm이 우아하게 재개됩니다.이 두 가지 옵션은 일반적으로 기본값으로 유지됩니다.
process_control_timeout = 0
#서브프로세스가 마스터프로세스 다중화 신호를 받아들일 시간 초과 설정간. 사용 가능한 단위: s( 초), m( 분), h( 시간), 또는 d( 일) 기본 단위: s( 초). 기본값: 0.
daemonize = yes
#백그라운드 실행 fpm, 기본값 yes, 만약디버깅을 위해 no로 변경할 수 있다.FPM에서는 서로 다른 설정을 사용하여 여러 프로세스 풀을 실행할 수 있습니다. 이러한 설정은 각 프로세스 풀마다 개별적으로 설정할 수 있다.
리슨 = 127.0.0.1:9000
#fpm 수신 포트, 즉 nginx에서 php처리된 주소는 일반 기본값으로 하시면 됩니다.사용 가능한 형식은 'ip:port', 'port', '/path/to/unix/socket' 입니다. 모든 프로세스 풀을 설정해야 합니다.
listen.backlog =-1
#backlog 수, -1은 무제한을 의미하며,운영체제 결정, 이 줄에 주석을 달면 된다. 19)listen.allowed_clients = 127.0.0.1
#FastCGI 프로세스의 IP 접근 허용, 설정Any는 IP를 제한하지 않습니다. 다른 호스트의 nginx도 이 FPM 프로세스에 액세스할 수 있도록 하려면 listen에서 비용적으로 액세스할 수 있는 IP를 설정합니다.기본값은 애니입니다.각 주소는 쉼표로 구분됩니다. 설정되지 않았거나 비어 있으면 모든 서버를 허용합니다.연결 요청
listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket 설정 옵션, 만약tcp 방식으로 접속하면 된다. 여기에 주석을 달면 된다.
user = www
group = www
#프로세스 시작의 계정과 그룹
request_terminate_timeout = 0
#단일 요청의 타임아웃 시간을 설정합니다. 이 옵션은 php.ini에 적용될 수 있습니다.설정의 'max_execution_time' 은( 는) 특정한 이유로 실행 중지하지 않는 스크립트가 유용합니다. '0' 로 설정하면 'Off' 를 의미합니다. 502 에러가 자주 발생할 때 이 설정을 변경해 보십시오.
request_slowlog_timeout = 10s
#이 설정을 요청한 타임아웃 시간이 지나면 해당 PHP를 스택 메시지로 호출합니다.정보를 느린 로그에 기록합니다. '0' 로 설정하면 'Off' 로 표시됩니다.
slowlog = log/$pool.log.slow
# 느린 요청 기록 로그, request_slowlog_ti에 맞추기meout 사용
rlimit_files = 1024
#파일 열기 설명자의 rlimit 제한을 설정합니다. 기본값: 시스템 정의값 기본값은 열림 핸들이 1024이고 ulimit-n을 사용하여 볼 수 있으며 ulimit-n 2048로 수정할 수 있습니다.
rlimit_core = 0
#핵심 rlimit 최대 제한값 설정. 사용 가능한 값: 'unlimited', 0 또는 양의 정수. 기본값: 시스템 정의 값.
chroot =
#시작할 때 Chroot 디렉터리. 정의된 디렉터리는 절대 경로여야 합니다. 설정이 되어 있지 않으면 Chroot을 사용할 수 없습니다.
chdir =
# 부팅 시 자동으로 Chdir이 디렉터리로 이동하도록 부트 디렉터리를 설정합니다. 정의된 항목절대 경로여야 합니다. 기본값: 현재 디렉터리 또는/ 디렉터리 (chroot의 경우)
catch_workers_output = yes
#실행 중 stdout과 stderr을 주요 오류일로 리디렉션로그 파일에서. 설정이 없으면 stdout과 stderr은 FastCGI 규칙에 따라 /dev/null. 기본값: null로 리디렉션됩니다.
static 정적 모드
php-fpm 작동 시, 고정적인 worker 수 만들기
이 모드는 비교적 간단합니다. 시작할 때설정된 pm.max_children에 따라 고정 개수 시작요청한 수신을 차단하는 프로세스입니다.
메서드 실행 흐름:
fpm_run()->fpm_children_create_initial()->fpm_children_make()
fpm을 시작할 때 f를 불러옵니다.pm_run 메서드, fpm_run 메서드는 하위 프로세스를 호출합니다.초기화 메소드 fpm_children_create_initial,
이 메서드 내에서 fpm이 호출됩니다._children_make 메서드는 worker 프로세스를 만듭니다.
php-fpm 시동용 고정장치크기를 정한 worker는 런타임에도 용량을 늘리지 않지만1초의 타이머가 있는데, 예를 들어 유휴 worker 개수, 활성 worker 개수, 네트워크 연결 큐 길이 등의 상태 정보를 집계하는 데 그친다.
배치하다.
pm=static
pm.max_children=3
static에서는 이 파라미터만 적용됩니다
메서드 실행 흐름:
fpm_run()->fpm_children_create_initial()->fpm_children_make()
fpm을 시작할 때fpm_run 메서드가 호출되고 fpm_run 메서드 내부에서 fpm_children_create_initia가 호출됩니다L,
이 방법 안에서 조율하다fpm_children_make 메서드로 Worker 프로세스 만들기
원리
설정 항목 요구 사항
1,pm.max_children > 0을( 를) 설정해야 합니다. 이 파라미터만 적용됩니다.
장단점
static으로 설정하면 max_children의 수만 고려되고 수량은 cpu의 개수에 따라 달라집니다.수와 애플리케이션의 응답 시간을 50으로 설정합니다.
우리 회사는 동태의 증가를 그렇게 십여 개 혹은 수십 개의 worker로 고려하지 않고 있으며, 우리의 메모리는 이 정도로 긴박하지 않다.그래서 우리는 단계별로 최대한의 트래픽에 worker 수를 배치했습니다 (하하, 50도 마음대로 정해서 충분합니다)
ondemand 온디맨드 방식
pm = ondemand
pm.process_idle_timeout = 60 #worker 몇 초 동안 빈 상태로 있다가 kill, 주문형 할당 모드 dynamic
pm.max_children=3
원리
원드먼드 원리도
\1. 위의 그림을 보면 알 수 있다.새 worker의 트리거 조건은 실제 요청이 아닌 연결의 도래입니다. (예를 들어, telnet과 같은 연결만 해도 요청 데이터를 보내지 않아도 새 worker가 생성됩니다.)
\2. worker의 수pm.max_children 구성과 함께 제한 전역 구성 process.max (정확히 세 가지 모드 모두 전역 구성으로 제한됨)
3.1초 타이머 작용
사용 가능한 worker 찾기( 예)유휴 시간이 pm.process_idle_timeout 크기를 초과합니다.닫습니다.이 메커니즘은 모든 worker를 닫을 수 있다.
설정 항목 요구 사항
\1.pm.max_children > 0
\2. pm.process_idle_timeout > 0, 설정하지 않으면 기본 10s
장단점
장점: 트래픽 수요에 따라 생성, 아니오시스템 자원 낭비(하드웨어가 이렇게 싼 시대에는 이 장점이 조금은 걸림돌)
단점: php-fpm 때문에짧은 연결이기 때문에 매번 요청이 있을 때마다 먼저 연결을 만듭니다. 연결을 만드는 과정은 반드시 위의 그래프의 실행 단계를 트리거합니다. 따라서 대용량 시스템에서 마스터 프로세스가 바빠지고 시스템 cpu 자원을 차지하며 불편합니다.대용량 데이터 환경에 적합한 배치
코드 흐름
원드 모드, 운행 흐름은 첫 번째 단계와 같습니다. 다른 점은 두 번째 함수에 work 프로세스를 할당하지 않고 이벤트 콜백 함수 fpm_pctl_on_socket_accept(), 일부 세대를 등록했다는 것입니다.사이즈는 아래와 같습니다
if (wp->config->pm == PM_STYLE_ONDEMAND) {
wp->ondemand_event = (struct fpm_event_s *)malloc(sizeof(struct fpm_event_s));
......
memset(wp->ondemand_event, 0, sizeof(struct fpm_event_s));
fpm_event_set(wp->ondemand_event,wp->listening_socket,FPM_EV_READ|FPM_EV_EDGE,fpm_pctl_on_socket_accept, wp);
......
}
위의 코드 조각은 일부 본문이 필요로 하는 내용만을 남겨 놓았다
ondemand 모드 work 프로세스 생성, 회변조 함수 fpm_pctl_on_socket_accept()의 부분 코드는 다음과 같다.
if (wp->running_children >= wp->config->pm_max_children) { //프로세스 수가 최대 제한을 초과하는지 여부를 결정합니다
......
return;
}
for (child = wp->children; child; child = child->next) {
//fpm_request_is_idle함수반환return proc->request_stage == FPM_REQUEST_ACCEPTING
if (fpm_request_is_idle(child)) {
return; // FPM_REQUEST_ACCEPTING딜러가 요청 대기 중
}
}
......
fpm_children_make(wp, 1, 1, 1);//작업 프로세스 만들기
ondemand 모드 work 프로세스의 종료
PFM이 이벤트 fpm_pctl을 등록했습니다_perform_idle_server_maintenance_heartbeat는 현재 모드에서 work 프로세스의 실행을 체크하며, 유휴 프로세스의 대기 시간이 pm_process_idle_timeout을 초과할 경우, 유휴 worker의 마지막 프로세스에 셧다운 신호를 보냅니다. 이 작업은 다음과 같이 메인 프로세스가 처리합니다
if (wp->config->pm == PM_STYLE_ONDEMAND) {
struct timeval last, now;
if (!last_idle_child) continue;//마지막 idle 프로세스
......
// last.tv_sec요청을 받은 마지막 시간
if (last.tv_sec < now.tv_sec - wp->config->pm_process_idle_timeout) {
last_idle_child->idle_kill = 1;
fpm_pctl_kill(last_idle_child->pid, FPM_PCTL_QUIT);
}
continue;
}
dynamic 모드: 동적 모드
dynamic 모드, 시작 시 할당작업 프로세스가 일정하게 진행되며 요청이 증가할수록 프로세스 수가 증가합니다. 이 모드에서는 다음과 같은 몇 가지 중요한 구성 요소가 있습니다
max_children 최대 프로세스 수
pm_max_spare_servers 사용 가능한 최대 프로세스 수
min_spare_servers 사용 가능한 최소 프로세스 수
start_servers 시작할 때의 프로세스 수
실행 과정은 ondemand 모드와 유사합니다. 부팅 시 메인 프로세스는 정해진 시간 내에 작업을 체크하기 위한 이벤트를 만듭니다. dynamic 모드가 초기화되면 일정 수의 프로세스가 생성되지만, ondemand 모드는 생성되지 않습니다.
배치하다.
pm = dynamic
pm.max_children = 3
pm.start.servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
원리
다이나믹 원리도
\1. 1초 타이머 기능
유휴 worker 수 확인양, 일정한 전략에 따라 동적으로 조정 worker 수, 증가 또는 감소.최대 worker 수 <=max_children·<=글로벌 process.max; 감소 시 idle >pm.max_spare_servers의 경우에만 유휴 worker를 닫습니다.
idle > pm.max_spare_servers, 가장 긴 부팅 시간을 가진 worker를 종료하고 본 처리를 종료합니다.
idle > = pm.max_childrenWARNING 로그를 출력하여 본 처리를 종료합니다.
idle <.max_children,계num 값을 계산하고 num개 worker를 기동하여 본 처리를 종료합니다
설정 항목 요구 사항
\1.pm.min_spare_servers/pm.max_spare_servers 유효 범위 (0,pm.max_children)
\2.pm.max_children > 0
\3.pm.min_spare_servers<=pm.max_spare_servers
\4. pm.start_servers 유효 범위[pm.min_spare_servers, pm.max_spare_servers] 설정이 없으면 기본 pm.min_spare_servers + (pm.max_spare_servers - pm.min_spare_servers) / 2
장단점
장점 : 동적 용량 확장, 낭비 없음시스템 리소스, 마스터 프로세스설정된 1초 타이머가 시스템에 미치는 영향은 무시한다.
단점: 모든 work의 경우er는 모두 일하고 있고, 새로운 요청이 온다.마스터가 1초 타이머 내에 새로운 worker를 하나 더 대기할 수 있습니다. 이 경우 최대 1s까지 대기할 수 있습니다.
결론
static 정적 모드, 시작할 때 고정 수량을 만듭니다.worker 프로세스, 실제 요청이 worker 프로세스보다 클 때 warning
ondemand 온디맨드배포 모드, 부팅 시 생성되지 않음worker 프로세스 구축, 필요에 따라 생성, idle_timeout 후 석방
이렇게 하면 제때에 석방될 수 없다.연결과 연결은 자원을 소모시킵니다
다이나믹 모드식 (기본값): 시작할 때 만들기지정된 수의 worker 프로세스, 상황에 맞는 worker, 정기적으로 worker 점검, 유휴 연결 해제
'개발 꿀팁 > PHP' 카테고리의 다른 글
프로그래밍 기술 L 리눅스 설치 PHP7.3.0 (0) | 2022.07.12 |
---|---|
네이티브 PHP 디지털 암호화 방법, 랜덤하게 해시 불규칙한 디지털 쌍 생성 (0) | 2022.07.12 |
php에서 인터페이스를 호출하고 인터페이스를 작성합니다 (0) | 2022.07.11 |
eclipse php 플러그인 설치 및 환경 설정 (0) | 2022.07.11 |
PHPWord를 사용하여 워드 문서 만들기 (0) | 2022.07.11 |