PHP的FPM或Nginx的封顶?

我使用blitz.io基本上爆炸我的网站与stream量,看看我的“学习系统pipe理员”如何在负载下举行。 我意识到这与现实世界一样有效或与大锤相关,但当我改变设置时,我真的只想看到一个比较。

我的设置按通信顺序(全部在Amazon EC2上),亚马逊Linux AMI

  • 1个亚马逊弹性负载均衡器
  • 两个Nginx服务器,上游…
  • 1个Php-fpm服务器(很快就是2个)。 连接到…
  • 1个RDS mysql服务器

一切都落后于VPC

对于我的testing,我所服务的网站是使用W3 Total Cache的Wordpress安装。

本来我只有1x Nginx + 1x Php-fpm(暗含1x Rds),都是微服务器。 我相信我得到850 req / sec,然后才开始大量超时(times> 1000ms)。

在此期间,CPU在phpfpm和nginx上都达到了100%。 所以..

然后我添加了第二个nginx服务器。 之后,我将两个nginx服务器都转换为“大”,同时将php-fpm转换为“大”。

我把我的php-fpm设置乘上了5倍,而令我惊愕的是testing几乎完全相同……这次唯一的区别是CPU和内存在所有3台服务器上都达到了5%左右。 这就像几乎没有任何资源被使用。 我查看了我的日志中的错误,并没有真正看到太多…

我已经看了很多次我的设置,我知道我错过了一些巨大的…

WordPress的部分的网站内容可以完全可以…如果我更新任何东西,我会清除caching。 Theres下半部分我的网站,但它的所有静态内容,没有数据库查询。 我使用一个PHP的“加载器”脚本,从包含文件中加载各种内容,但是这是非常轻量级的。

我听说过有关ulimit或者更确切地说..可能是一个问题?

我正在尝试在1分钟内做6000个用户

我的configuration

服务器1:Nginx

 nginx.conf user www www; worker_processes auto; events { worker_connections 1024; } error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; http { server_tokens off; include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; keepalive_timeout 65; sendfile on; tcp_nopush on; tcp_nodelay off; gzip on; gzip_http_version 1.0; gzip_disable "msie6"; gzip_comp_level 5; gzip_buffers 16 8k; gzip_min_length 256; gzip_proxied any; gzip_vary on; gzip_types # text/html is always compressed by HttpGzipModule text/css text/plain text/x-component application/javascript application/json application/xml application/xhtml+xml application/x-font-ttf application/x-font-opentype application/vnd.ms-fontobject image/svg+xml image/x-icon; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers RC4:HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; upstream php { # ip_hash; server 10.0.0.210:9001; } include sites-enabled/*; } 

相关的nginx设置

/etc/nginx/conf/cache-descriptors.conf

 open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; 

服务器2:php-fpm

PHP-fpm.conf

 include=/etc/php-fpm.d/*.conf [global] pid = /var/run/php-fpm/php-fpm.pid error_log = /var/log/php-fpm/error.log log_level = notice emergency_restart_threshold = 5 emergency_restart_interval = 2 

php.ini中

In this file I honestly didnt change much in php.ini except for the CGI path setting for the nginx zero day exploit. Maybe one more setting or two but vanilla for the most part

/etc/php-fpm.d/www.conf

 [www] listen = 9001 ; # nginx-master, nginx-2 listen.allowed_clients = 10.0.0.248,10.0.0.155 user = www group = www pm = dynamic pm.max_children = 500 pm.start_servers = 150 pm.min_spare_servers = 50 pm.max_spare_servers = 250 pm.max_requests = 1200 request_terminate_timeout = 30 slowlog = /var/log/php-fpm/www-slow.log security.limit_extensions = .php php_flag[display_errors] = off php_admin_value[error_reporting] = 0 php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 128M php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session 

如果有人有任何想法,这将不胜感激。 我肯定会碰到某种我看不见的“隐形极限”。

谢谢!

PS如果你有更好的方法来testing,我会全力以赴。

RDS的截图是在下面的评论(我保持在微观)

这里是testing发生的事情

闪电战

看来你已经达到极限了,比如临时端口范围的数量,打开的最大文件描述符的数量,套接字的耗尽,将内存换到磁盘,甚至你退出套接字内存。

查看/ var / log / messages,dmesg,/ proc / net / sockstat以查找瓶颈位置的线索。

没有日志,很难得到帮助。