nginx 和 php-fpm 首次访问时速度非常慢

nginx 和 php-fpm 首次访问时速度非常慢

我的服务器上运行着一个 nginx 1.4.5 webserver,其中装有 php-fpm 5.5.7,但如果我的服务器闲置了一段时间,访问速度就会非常慢。大约需要 10-20 秒才能获得响应(第一个字节),之后速度又会很快。我不知道为什么过了一段时间后第一次访问时需要很长时间才能响应。我尝试了 unix 套接字和 tcp,都没有效果。这是我的配置:

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/*;
}

我的 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

现在池需要很长时间才能响应(第一个字节):

[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

服务器技术细节:

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

时间线图片 浏览器等待第一个字节 22 秒。接收内容仅用了 86 毫秒。因此这肯定是服务器 (nginx/php-fpm): 在此处输入图片描述

网站在用户主文件夹中运行,用户数为最大值。一切正常。没有生成慢速日志文件,没有 php 错误,没有 nginx 错误。

为什么第一个字节这么慢?

更新2:

将 nginx 的错误日志设置为 DEBUG,只给了我一些关于匹配的信息。但在我调用该网址后,我在使用“tail -f”观察它时打印了 3 个日志条目,因此 nginx 像往常一样正确运行,在它重定向到 php 脚本后,大约需要 15-20 秒才能得到响应并打印更多日志。所以它要么是 php-fpm,要么是 mysql。我想知道如何“重置”我的服务器,以便我可以轻松重现那个长的第一个字节响应。我猜它缓存了结果或其他东西并在第一次调用后使用它,如何杀死那个缓存以便我可以测试。因为我只能在 3 或 4 小时内测试一次,所以我必须等待才能再次尝试获取缓慢的第一个字节响应。

答案1

该死,是 CMS 本身的问题,而不是我在 CMS 上运行的代码。我使用的是 Contenido(一种易于使用的 CMS),但它有一种称为“PseudoCron-Jobs”的东西,一段时间后会执行很多这样的任务。其中大多数我都不需要,所以我禁用了它们。现在它很快了。

因此,无论谁想要使用 Contenido,请检查 contenido/cronjobs 文件夹并禁用 crontab.txt 文件中的某些内容以跳过您实际上不需要的内容。

到目前为止,NGinx 1.4.5 与 PHP-FPM 5.5.7 和 MySQL 5.5 运行良好。:-)

相关内容