Я использую blitz.io, чтобы заполнить свой сайт трафиком, чтобы увидеть, как мой «обучающийся системный администратор» выдерживает нагрузку. Я понимаю, что это так же эффективно или актуально для реального мира, как кувалда, но мне действительно хотелось просто увидеть сравнение, когда я меняю настройку.
Моя настройка в порядке связи (все на Amazon EC2), Amazon Linux AMI
Все за VPC
Для моего тестирования сайт, который я обслуживаю, представляет собой установку Wordpress с W3 Total Cache.
Первоначально у меня был 1x Nginx + 1x Php-fpm (подразумевается 1x Rds), все как микросерверы. Я считаю, что у меня было 850 запросов в секунду, прежде чем я начал получать много тайм-аутов (время> 1000 мс).
За это время процессор работал на 100% как на phpfpm, так и на nginx. Так..
Затем я добавил второй сервер nginx. После этого я преобразовал оба сервера nginx в «большие», а также php-fpm в «большие».
Я умножил свои настройки php-fpm в 5 раз, и, к моему ужасу, тесты были почти идентичными ... единственная разница на этот раз в том, что и ЦП, и память на всех трех серверах стали МАКСИМАЛЬНЫМИ примерно на 5%. Это похоже на то, что почти НИКАКИЕ ресурсы не использовались. Я поискал в журналах ошибки и особо не увидел ...
Я много раз просматривал свои настройки и знаю, что упускаю что-то огромное ...
Контент сайта для раздела wordpress может быть полностью кэшируемым ... если я что-нибудь обновлю в нем, я очищу кеш. На моем сайте есть вторая половина, но ВСЕ статическое содержимое, без запросов к базе данных. Я использую сценарий php 'loader', который загружает различный контент из включаемых файлов, но это ... довольно легкий.
Я что-то слышал о ulimit
или скорее .. это может быть проблемой?
Я пытаюсь сделать 6000 пользователей в течение 1 минуты
Мои конфиги
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;
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 Если у вас есть лучший способ тестирования, я бы все уши ..
скриншот RDS находится в комментарии ниже (я сохранил его на микро)
вот что случилось с тестом
Кажется, вы достигли пределов, да, таких как количество временных диапазонов портов, количество максимальных открытых дескрипторов файлов, истощение сокетов, перестановка памяти на диск или даже выход из памяти сокета.
Посмотрите / var / log / messages, dmesg, / proc / net / sockstat, чтобы узнать, где находятся ваши узкие места.
Без логов трудно помочь.