После нескольких дней отладки и настройки параметров я устаю и не могу найти решение. Любезное руководство.
У меня следующий сервер в DigitalOcean:
64GB Memory
8 Core processor
200GB SSD drive
И я веду на нем единственный сайт Wordpress. Сайт получает высокую посещаемость. (От 2000 до 3000 одновременных пользователей в реальном времени) И я уверен, что из-за моих плохих настроек я теряю трафик и не могу обслуживать страницы для пользователей. Я ожидаю, что пользователей в реальном времени будет 5000+, но всегда остается около 2000.
Постоянно получаю ошибки OOM и из-за которых mysql
или php5-fpm
убивается и сайт отключается. Если я настрою php-fpm
и nginx
я получил 502
и 503
ошибки. Или я получаю upstream timed out (110: Connection timed out)'
или FastCGI sent in stderr: PHP message: PHP Fatal error: Maximum execution time of 30 seconds exceeded
ошибка.
Теперь я изменил настройки, чтобы не получать никаких ошибок, но трафик упал примерно до 1500 одновременных пользователей, и он отказывается расти. Так что я уверен, что в моих настройках что-то не так.
/etc/php5/fpm/pool.d/www.conf
настройки:
pm = dynamic
pm.max_children = 500
pm.start_servers = 150
pm.min_spare_servers = 100
pm.max_spare_servers = 200
pm.max_requests = 5000
Настройки FastCGI: /etc/nginx/conf.d/default.conf
location ~ \.php$ {
try_files $uri =404;
# proxy buffers - no 502 errors!
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
fastcgi_buffers 256 16k;
fastcgi_buffer_size 128k;
fastcgi_max_temp_file_size 0;
fastcgi_intercept_errors on;
fastcgi_keep_conn off;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/dev/shm/php-fpm-www.sock;
}
Настройка APC: /etc/php5/fpm/php.ini
[apc]
apc.write_lock = 1
apc.slam_defense = 0
apc.shm_size = "1024M"
Я заметил это php5-fpm
процессы занимают много памяти. Например. когда я вычисляю средний объем памяти на процесс, я получаю: ps --no-headers -o "rss,cmd" -C php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
дает мне 238M
для одновременного трафика 1100.
Пожалуйста, объясните мне, где моя конфигурация неверна. Потому что я на 100% уверен, что мой трафик задыхается.
Дополнительная информация
Конфигурация Nginx: /etc/nginx/nginx.conf
worker_processes 12;
worker_rlimit_nofile 20000;
events {
worker_connections 3000;
use epoll;
multi_accept on;
}
Но я заметил, что ulimit на сервере:
ulimit -n
показывает 1024
только. Это связано с моей проблемой?