php-fpm 和 nginx 一起实现超快速和超时响应

php-fpm 和 nginx 一起实现超快速和超时响应

我的服务器出了点问题:

Ubuntu 12.04
nginx 1.4.6
2GB RAM
OpenVZ VPS

我增加了 php-fpm 设置,因为默认设置太低了。如下所示:

pm.max_children = 48
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 15
pm.max_requests = 100

我得到了超快的响应,但 10 次中有 4 次,当我点击链接时,它会超时或得到非常迟的响应。如果它正常工作并且似乎是那些较长的链接之一,我再次点击它,我可能会得到快速响应或再次延迟。

无论如何,我将服务器数量减少到如下程度:

pm.max_children = 48
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 100 

现在服务器运行正常。虽然响应速度不是很快,但所有连接都良好且合理。我最多在 1 秒内收到响应。

我认为这些第一个数字对于我的机器来说并不高。(这是目前网站运行的情况)

total       used       free     shared    buffers     cached
Mem:          2048        604       1443          0          0        112
-/+ buffers/cache:        491       1556
Swap:          256          0        256

当它出现异常时,我记得“-/+ buffers/cache”行大致相同,但第一行“Mem”显示已使用 1600。

该服务器上只有一个网站,其繁忙时段在 15 分钟内会有 60-90 次访问。(几乎不会同时有 30 个请求?)

我很好奇为什么更高的数字(似乎对我的服务器资源没有问题)会导致这种行为。我也想获得那些超快速的响应。

如果有人感兴趣的话,这是我的 nginx 配置。(删除了不必要的行,例如文档根目录和它正在监听的端口等等)

user www-data www-data;
worker_processes  2;

events
{
        worker_connections 1024;
}

http
{


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

    #access_log off;
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     off;
    keepalive_timeout  5;
    client_max_body_size 10M;
    server_tokens off;

    gzip  on;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    server
    {
            location ~ \.php$
            {
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include /etc/nginx/fastcgi_params;
            }

     }
}

答案1

您是否已验证监听 9000 的后端服务器是否及时响应?如果没有,请调整您的后端服务器。您是否查看过超时参数 refhttps://stackoverflow.com/questions/561946/how-do-i-prevent-a-gateway-timeout-with-fastcgi-on-nginx

否则,在 nginx 中启用调试选项并参考日志文件寻找一些线索。http://nginx.org/en/docs/debugging_log.html

相关内容