我正在使用 nginx/1.7.7,配置如下:
user nginx;
worker_processes auto;
worker_rlimit_nofile 300000;
events {
multi_accept on;
worker_connections 300000;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
proxy_buffering off;
client_max_body_size 100m;
gzip on;
gzip_comp_level 5;
server {
listen 80;
index index.php index.html index.htm;
root /var/www;
server_tokens off;
chunked_transfer_encoding off;
location ~ \.php$ {
try_files $uri =404;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_keep_conn on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
}
这是我的 PHP-FPM 配置(php 5.6.x)
rlimit_files = 6000
[www]
user = nginx
group = nginx
listen = /var/run/php5-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.allowed_clients = 127.0.0.1
pm = ondemand
pm.max_children = 30000;
pm.process_idle_timeout = 1;
chdir = /
security.limit_extensions = .php
php_flag[display_errors] = on
php_flag[display_startup_errors] = on
通过我的设置,我可以为客户提供实时视频文件(因此,在用户停止连接之前,请求永远不会结束)。
这里的问题是,当每秒发出许多请求时(类似于连续的,你可以称之为洪水),我的整个网络服务器变得非常慢我甚至出现多次 504 网关超时. 发生洪水时,某些请求并不完整。
例如我f 2000 个请求正在观看直播没有洪水,一切安好,,,虽然请求数没有超过每秒 400-500 个(但我再说一遍,它们是连续的but with flood
)everything is becoming very very slow
我的服务器有 128 GB 的 RAM 和 38 个核心。发生洪水时,我的 CPU 甚至达不到 10%,这让我怀疑如果我的 CPU 全速读取,这个问题就不应该存在。
当发生这种情况时,我的 RAM 也处于非常好的水平。(使用率甚至不到 10-15%)。
我是不是漏掉了什么?也许 sock(php5-fpm.sock)有一些限制?我们可以提高它们吗?
谢谢问候