Estou usando o blitz.io para basicamente explodir meu site com tráfego para ver como meu 'administrador de sistema de aprendizado' se mantém sob carga. Eu percebo que isso é tão eficaz ou relevante para o mundo real quanto uma marreta, mas eu realmente queria apenas ver uma comparação quando mudei de cenário.
Minha configuração na ordem de comunicação (tudo no Amazon EC2), Amazon Linux AMI
- 1x balanceador de carga elástica da Amazon
- 2x servidores Nginx que são enviados para ...
- 1x servidor php-fpm (em breve será 2x). Que se conecta a ...
- 1 servidor RDS mysql
Tudo está por trás de um VPC
Para meu teste, o site que estou atendendo é uma instalação do Wordpress com o W3 Total Cache.
Originalmente eu tinha 1x Nginx + 1x Php-fpm (1x Rds está implícito) todos como micro-servidores. Acredito que recebi 850 req / s antes de começar a receber muitos tempos de espera (tempos > 1000ms).
Durante esse tempo, a CPU atingiu 100% no phpfpm e no nginx. Então ..
Eu adicionei um segundo servidor nginx. Depois disso, converti os dois servidores nginx para 'large', bem como o php-fpm para 'large'.
Eu multipliquei minhas configurações do php-fpm x5 e para meu espanto os testes foram quase idênticos ... a única diferença desta vez é tanto a CPU quanto a memória foram de aproximadamente 5% em todos os 3 servidores. É como se quase todos os recursos estivessem sendo usados. Eu olhei em meus registros por erros e realmente não vi muito ...
Eu olhei minhas configurações muitas vezes e sei que estou perdendo algo enorme ...
O conteúdo do site para a seção wordpress pode ser completamente copiável ... se eu atualizar qualquer coisa nele, eu limparei o cache. Há uma segunda metade no meu site, mas seu conteúdo estático ALL, nenhuma consulta do banco de dados. Eu uso um script 'carregador' php que carrega em vários conteúdos de arquivos de inclusão, mas é isso .. muito leve.
Eu ouvi algo sobre ulimit
ou melhor ... isso poderia ser um problema?
Estou tentando fazer 6000 usuários ao longo de um minuto
Minhas configurações
Servidor 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/*;
}
configuração nginx relevante ...
/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;
Servidor 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
Se alguém tiver alguma ideia, isso será muito apreciado. Eu definitivamente estou atingindo algum tipo de 'limite invisível' que não estou vendo.
Obrigado!
PS Se você tem uma maneira melhor de avaliar, eu seria todo ouvidos ..
screenshot do RDS está no comentário abaixo (guardei no micro)
aqui está o que aconteceu com o teste