单个连接被阻止时服务器无响应

单个连接被阻止时服务器无响应

我不确定如何正确说明这个问题,我并不是真正的服务器专家。我很乐意根据需要提供额外的数据。

我有一个 PHP Web 应用程序在 Ubuntu Server 上运行,该服务器使用 nginx 和 PHP-FPM(通过套接字文件通信)。此应用程序通过 curl 与另一个后端服务器通信。我有一个请求需要一分钟才能完成。当我点击此请求时,整个服务器变得无响应。当这个长请求处于待处理状态时,其他请求都无法完成。当我重新启动 PHP-FPM 或此连接自行断开时 - 一切都恢复正常。

我尝试更改一些与并发相关的 nginx 和 PHP FPM 参数,但无济于事。

nginx 服务器配置:

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com/web;

    # removing trailing dot
    if ($http_host ~ "\.$" ) {
        rewrite ^(.*) $scheme://$host$1 permanent;
    }

    location / {
        # try to serve file directly, fallback to rewrite
        try_files $uri @rewriteapp;
    }

    location /js/which.js {
        rewrite . /which.php last;
    }

    location @rewriteapp {
        # rewrite all to app_dev.php
        rewrite ^(.*)$ /app_dev.php/$1 last;
    }

    location ~ ^/(app_dev\.php|which\.php)(/|$) {
        fastcgi_pass unix:/var/run/php-fpm/example.com.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }

    gzip on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;

    gzip_types
        text/plain
        text/css
        application/json
        application/x-javascript
        text/xml
        application/xml
        application/xml+rss
        text/javascript
        application/javascript
        text/x-js
    ;

    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    # Logging configuration.
    error_log /var/www/example.com/var/logs/nginx/error.log info;
}

PHP FPM 配置:

[example.com]

user = fpm-example.com
group = fpm-example.com
listen = /var/run/php-fpm/example.com.sock
listen.owner = nginx
listen.group = nginx

pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30

request_terminate_timeout = 35s

catch_workers_output = yes

# Logging
php_flag[display_errors] = off
php_admin_value[error_log] = /var/www/example.com/var/logs/php-fpm/errors.log
php_admin_flag[log_errors] = on

这可能是什么原因呢?

答案1

抱歉,这实际上不是服务器问题。经过一些额外的测试,很明显这是应用程序本身的问题,而不是服务器的问题。我创建了另一个问题在 StackOverflow 上缩小这个问题的范围。

相关内容