我不确定如何正确说明这个问题,我并不是真正的服务器专家。我很乐意根据需要提供额外的数据。
我有一个 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 上缩小这个问题的范围。