방문자가 많으면 Php5-fpm 충돌


8

Nginx에 소요되는 리소스가 적기 때문에 Litespeed에서 Nginx로 OP를 변경하기로 결정했습니다.

온라인에서 500 명의 사용자가있는 Wordpress 사이트를 운영하고 있습니다.

많은 도움을 주셔서 감사합니다.) 나는 몇 가지 사항을 편집했습니다.

나도 몇 가지 질문이 남아 있습니다.

내가 제거해야합니까; 오후 전에. 설정? 나는 그것을 제거 무엇 구성 카운트? / etc / php5 / fpm에 php-fpm.conf라는 두 개의 빠른 cgi가 있고 /etc/php5/fpm/pool.d에 www.conf라는 두 개의 빠른 cgi가 있습니까?

밤새 새 구성을 시도했지만 깨우면 이미 빈 페이지가 있습니다. 상단:

top - 13:55:27 up 1 day, 19:28,  2 users,  load average: 0.18, 0.36, 0.19
Tasks:  84 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.0%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3974264k total,  1051360k used,  2922904k free,   162380k buffers
Swap:  3998700k total,        0k used,  3998700k free,   609220k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1857 www-data  20   0  193m  55m  22m S    0  1.4   0:04.67 php5-fpm
    1 root      20   0  8356  808  680 S    0  0.0   0:01.37 init
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd

CPU 사용량이 낮아졌지만 충돌을 수정하지는 않습니다 ...

내 설정은 다음과 같습니다. php-fpm.conf

    ;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

; All relative paths in this configuration file are relative to PHP's install
; prefix (/usr). This prefix can be dynamicaly changed by using the
; '-p' argument from the command line.

; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
; Relative path can also be used. They will be prefixed by:
;  - the global prefix if it's been set (-p arguement)
;  - /usr otherwise
;include=/etc/php5/fpm/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Note: the default prefix is /var
; Default Value: none
pid = /var/run/php5-fpm.pid

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; in a local file.
; Note: the default prefix is /var
; Default Value: log/php-fpm.log
error_log = /var/log/php5-fpm.log

; syslog_facility is used to specify what type of program is logging the
; message. This lets syslogd specify that messages from different facilities
; will be handled differently.
; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON)
; Default Value: daemon
;syslog.facility = daemon

; syslog_ident is prepended to every message. If you have multiple FPM
; instances running on the same server, you can change the default value
; which must suit common needs.
; Default Value: php-fpm
;syslog.ident = php-fpm

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice

; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of '0' means 'Off'.
; Default Value: 0
emergency_restart_threshold = 1

; Interval of time used by emergency_restart_interval to determine when 
; a graceful restart will be initiated.  This can be useful to work around
; accidental corruptions in an accelerator's shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
emergency_restart_interval = 1s

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
process_control_timeout = 10s

; The maximum number of processes FPM will fork. This has been design to control
; the global number of processes when using dynamic PM within a lot of pools.
; Use it with caution.
; Note: A value of 0 indicates no limit
; Default Value: 0
process.max = 150

; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
;daemonize = yes

; Set open file descriptor rlimit for the master process.
; Default Value: system defined value
rlimit_files = 1024

; Set max core size rlimit for the master process.
; Possible Values: 'unlimited' or an integer greater or equal to 0
; Default Value: system defined value
;rlimit_core = 0

; Specify the event mechanism FPM will use. The following is available:
; - select     (any POSIX os)
; - poll       (any POSIX os)
; - epoll      (linux >= 2.5.44)
; - kqueue     (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0)
; - /dev/poll  (Solaris >= 7)
; - port       (Solaris >= 10)
; Default Value: not set (auto detection)
; events.mechanism = epoll

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ; 
;;;;;;;;;;;;;;;;;;;;

; Multiple pools of child processes may be started with different listening
; ports and different management options.  The name of the pool will be
; used in logs and stats. There is no limitation on the number of pools which
; FPM can handle. Your system will tell you anyway :)

; To configure the pools it is recommended to have one .conf file per
; pool in the following directory:
include=/etc/php5/fpm/pool.d/*.conf

request_terminate_timeout = 30s

pm.max_children = 25

; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 5

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 2

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 5

; The number of seconds after which an idle process will be killed.
; Note: Used only when pm is set to 'ondemand'
; Default Value: 10s
pm.process_idle_timeout = 10s;

fastcgi_params :

fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;

fastcgi_param   SCRIPT_FILENAME     $request_filename;
fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;

fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR     $remote_addr;
fastcgi_param   REMOTE_PORT     $remote_port;
fastcgi_param   SERVER_ADDR     $server_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_NAME     $server_name;

#fastcgi_param  HTTPS           $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

nginx 설정 :

user www-data;
worker_processes 2;
pid /var/run/nginx.pid;

events {
    worker_connections 500;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 40;
    types_hash_max_size 2048;
    server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    # access_log /var/log/nginx/access.log;
    # error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

 gzip_vary on;
 gzip_proxied any;
 gzip_comp_level 9;
 gzip_buffers 16 8k;
 gzip_http_version 1.1;
 gzip_types text/plain text/css application/json application/x-javascript text/$

www.conf

; Start a new pool named 'www'.
; the variable $pool can we used in any directive and will be replaced by the
; pool name ('www' here)
[www]

user = www-data
group = www-data


pm = dynamic

pm.max_children = 25

pm.start_servers = 5

pm.min_spare_servers = 2

pm.max_spare_servers = 5

pm.process_idle_timeout = 10s;

pm.max_requests = 100

request_terminate_timeout = 120s

Mashine : 듀얼 코어 4GB 램


PHP-FPM 에러 로그는 무엇을 말합니까?
devicenull

다른 fpm을 다시 시작할 때의 기록 만 있습니다 ... [04-Apr-2012 13:46:44]주의 사항 : 종료 중 ... [04-Apr-2012 13:46:44]주의 사항 : 종료, 안녕 -안녕! [2012 년 4 월 4 일 13:46:44]주의 사항 : fpm이 실행 중입니다, pid 1744 [04-Apr-2012 13:46:44]주의 사항 : 연결을 처리 할 준비가되었습니다 [04-Apr-2012 13:48:57] 주의 사항 : [pool www] 하위 1748은 시작 후 132.647614 초 후에 코드 0으로 종료되었습니다. [04-Apr-2012 13:48:57]주의 사항 : [pool www] 하위 1829 시작
chillah

방금 워드 프레스 파일을 비활성화 / 활성화하거나 편집하면 PHP fpm이 더 빨리 충돌한다는 것을 알았습니다. 하지만 100 % 확실하지는 않습니다 ...
chillah

여전히 충돌이 발생합니까? 의 사용량을 확인 했습니까 APC? 일반적으로 풀은 별도의 구성 파일 (모든 오후 설정이 적용되는 위치)에 정의합니다.
Dada

예, 여전히 충돌합니다. 내 페이지의 방문자가 많을수록 충돌이 증가하는 것 같습니다. 나는 "상단"에서 apc prozess를 볼 수 없습니다. 어떻게 확인할 수 있습니까? 나는 cron을 사용하여 지금 2 분마다 PHP fpm을 다시 시작합니다 .... 나는 그 문제를 곧 고칠 필요가 있습니다!
chillah

답변:


10

같은 opcode 캐시를 사용하고 있는지 확실하지 않습니다 APC. 우선, 활성화하십시오. 조각화를 피하기 위해 메모리를 조정하십시오. 또한, 사용 소켓이 아닌 HTTP의 연결 nginxphp5-fpm, 장소에 소켓이 /dev/shm. nginx에서을 사용 fastcgi_pass unix:/dev/shm/php5-fpm.sock;하고 그에 따라 php5-fpm의 구성을 변경하십시오.

pm.max_children30-40-50-60과 같이보다 현실적인 것으로 낮추고 로로드 및 사용 가능한 메모리를 확인하십시오 free -m. 클라이언트에 502/504 오류가 발생하는지 확인하십시오. pm.start_servers이에 따라 하한 , 최소 및 최대 _ 스페어 (15, 5, 25)입니다.

익명 많은 사용자가있는 경우, 같은 워드 프레스에 대한 어떤 캐싱 플러그인을 사용하는 것을 고려 WP-FFPC, WP Super Cache또는 유사한.

nginx에서 활성화 한 경우 gzipping을 비활성화하십시오.

아마도 nginx에서 조정 fastcgi_buffer_sizefastcgi_buffers옵션 이 필요할 수 있습니다.

Mysql에서 쿼리 캐시가 활성화되어 있고 충분한 지 확인하십시오.

munin로드 / 메모리 소비 / 대기 시간 등을 확인하기 위해 현장에 모니터링 시스템이 설치되어 있어야합니다.


nginx와 php5-fpm의 연결은 HTTP가 아니라 TCP 일 수 있습니다. JFYI.
Aykut Çevik

4

PHP 프로세스를 실행하기 위해 메모리가 부족할 때 서버에 문제가 발생할 수 있습니다. php5-fpm 설정은 4GB RAM에 비해 관대합니다. 최적의 php5-fpm 구성에 도달하기 위해 많은 노력을 기울였습니다 (32GB 램 및 + 1K 온라인 사용자의 경우 관련 매개 변수는 다음과 같습니다).

pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 2 
pm.max_spare_servers = 5
pm.max_requests = 100

또한 유휴 프로세스로 인한 메모리 부족을 피하기 위해 요청 종료 시간 초과를 설정하는 것을 잊지 마십시오.

request_terminate_timeout = 120s

위의 지시에서 사용하는 타임 아웃은 php.ini의 max_execution_time 지시어를 따라야합니다.

nginx의 경우 gzip을 켜는 것은 매우 좋은 생각입니다. CPU가 매우 저렴하며 서버의 대역폭을 절약합니다.

   #sendfile on;
    #tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 10;
    types_hash_max_size 2048;
    # server_tokens off;
    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 9;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/$

행운을 빕니다


밤새 구성을 시도했지만 CPU는 빈 페이지와 충돌을 수정하지 않은 사용량이 낮아 보입니다. 여기에 Ip 카운터 이미지 : abload.de/img/unbenanntsgyxi.png
chillah

나는 세트에 추천에 동의 request_terminate_timeout하지만 이유는 정확하지 않습니다) PHP의 때이 지시자는 안전 장치로, CPU의 일정 시간 후 실행중인 프로세스를 종료하는 것입니다 max_execution_time(이 있어야 이는이를 얻기 위해 작은 값을 비트 수 없었다 첫 번째 기회) [출처 ]. "유휴 프로세스로 인한 메모리 부족을 피하기 위해"사용 지시문은 pm.process_idle_timeout = 40 [이 답변 참조 ]입니다.
tanius

1

pm = ondemand를 사용하고 php의 memory_limit 크기가 머신의 메모리에 맞게 조정 가능한지 확인하십시오.

약 24MB의 PHP-FPM 서버 인 128MB의 PHP 프로세스를 가진 4GB 시스템의 경우, 서버는 최대 서버 수를 결정하고로드가 증가함에 따라 새로운 서버를 생성하기 때문에 필요합니다.


1
대부분의 경우 PHP-FPM 주문형 프로세스 관리자가 더 나은 선택이라는 데 동의하십시오. 그러나 최대. 하위 프로세스 수는 다음과 같이 계산할 수 없습니다 memory_limit. PHP 프로세스가 강제 종료되기 전에 소비 할 수있는 절대 최대 값입니다. 평균적으로 소비량이 훨씬 적습니다.
tanius

1
어쨌든 메모리는 일반적으로 최대 제한 요소가 아닙니다. CPU 코어가 아닌 자식 최대 자녀 수는 약으로 설정해야합니다. CPU 코어 수 및 IO 대기 등을 보상하기위한 몇 가지. 100 % CPU로드를 초과하는 것보다 빠른 것은 없습니다. 대기열에서 대기하는 것과 스위칭에서 느린 병렬 서비스를 제공하는 것의 차이 일뿐입니다.
tanius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.