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.