nginx e php-fpm muito lento no primeiro acesso

1

Eu tenho um servidor web nginx 1.4.5 com o php-fpm 5.5.7 em execução no meu servidor, mas se o meu servidor ficar inativo por um tempo, acessá-lo é muito lento. Demora cerca de 10 a 20 segundos para obter a resposta (primeiro byte), depois disso é rápido novamente. Eu não sei porque leva uma eternidade para responder no primeiro acesso depois de um tempo. Eu tentei ambos os soquetes unix e tcp, sem efeito. Aqui está minha configuração:

NGINX:

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1000;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65s;
    keepalive_requests 1000;
    gzip off;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

minha configuração padrão do php:

include=etc/fpm.d/*.conf
[global]
error_log = log/php-fpm.log
log_level = notice
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s

agora o pool que leva as idades para responder (primeiro byte):

[myweb]
;listen = /usr/local/etc/sockets/myweb.socket
listen = 127.0.0.1:9001
listen.owner = max
listen.group = max
listen.mode = 0666
user = max
group = max
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.status_path = /status
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200
slowlog = /home/max/logs/max.slow.log
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
php_admin_value[default_charset] = UTF-8
php_value[error_reporting] = 2147483647
php_admin_flag[display_errors] = On
php_admin_flag[display_startup_errors] = On
php_admin_value[error_log] = "/var/tmp/php.max.error.log"
php_admin_value[log_level] = DEBUG
php_admin_value[upload_max_filesize] = 10M
php_admin_value[post_max_size] = 10M
php_admin_value[max_execution_time] = 60

Detalhes técnicos do servidor:

AMD Athlon(tm) 64 X2 Dual Core Processor 3400+
4GB RAM
500 GB RAID1 HDD
website runs on MySQL 5.5.35
nginx 1.4.5
php-fpm 5.5.7

Foto da linha do tempo O navegador esperou 22 segundos pelo primeiro byte. Receber o conteúdo levou apenas 86ms. Então, este deve ser o servidor (nginx / php-fpm):

Ositeéexecutadoemumapastainicialdeusuários,ousuáriotemnomáximoTudofuncionabem.Nenhumarquivodeloglentogerado,nenhumerrodephp,nenhumerrodenginx.

Porqueomundoestálentonoprimeirobyte?

UPDATE2:

ConfigurarologdeerrosdonginxparaDEBUG,medeuapenasalgumasinformaçõessobreapartida.Maslogodepoisqueeuchameiourl,eutenho3entradasderegistroimpressasenquantoassistocom"tail -f", então nginx está fazendo o seu direito como de costume, logo após redirecionar para o script php, demora cerca de 15-20 segundos antes Eu recebo minha resposta e mais registros impressos. então é php-fpm ou mysql. Gostaria de saber como posso "redefinir" meu servidor para que eu possa reproduzir facilmente essa resposta longa de primeiro byte. Eu acho que seu cache o resultado ou algo e usá-lo após a primeira chamada, como matar esse cache para que eu possa testar. Porque eu posso testar isso apenas uma vez em 3 ou 4 horas, então eu tenho que esperar antes que eu possa tentar novamente recebendo a resposta lenta de primeiro byte.

    
por NovumCoder 18.02.2014 / 10:16

1 resposta

0

Caramba, foi o próprio CMS, não meu código em execução no CMS. Eu estou usando Contenido (um fácil de usar CMS), mas tem algo chamado "PseudoCron-Jobs" e há muitos deles sendo executado depois de um tempo. A maioria deles eu não preciso, então eu os desativei. Agora é rápido.

Para quem quiser usar o Contenido, verifique a pasta contenido / cronjobs e desative alguns no arquivo crontab.txt para pular as coisas que você realmente não precisa.

O NGinx 1.4.5 com o PHP-5.5.5 e o MySQL 5.5 correm bem até agora. : -)

    
por 21.02.2014 / 10:57

Tags