我正在使用 PHP 5.6.X 和 nginx 1.8.0 。
Nginx配置:
user nginx;
worker_processes auto;
worker_rlimit_nofile 300000;
events {
multi_accept on;
worker_connections 6000;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
proxy_buffering off;
client_max_body_size 100m;
gzip on;
gzip_comp_level 5;
server {
listen 8000;
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配置:
pid = /var/run/php5-fpm.pid
error_log = /var/logs/php5-fpm.log
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 = 6000;
pm.process_idle_timeout = 1;
chdir = /
security.limit_extensions = .php
php_flag[display_errors] = on
php_flag[display_startup_errors] = on
我有这个 PHP 脚本
<?php
shell_exec($_POST['command']);
?>
当我发布命令时
/usr/bin/timeout 10s sleep 15
我在 10 秒后收到了来自 nginx 的响应,这是正常的并且按预期工作。
如果我运行 20 个并发连接(更多就更糟了),所有这些请求都会在 20 秒后完成。时间几乎翻倍了。而且只有 20 个并发,我甚至不能称之为洪水之类的。
我使用找到的工具同时运行 20 个连接,甚至还使用 curl Multi Thread 创建了自己的连接。所有连接的响应都相同... 20 秒。如果我同时运行 50 个连接,30 秒后就会收到响应。
我是否遗漏了什么,或者是正常的...如果是正常的,为什么是正常的? :/