После переключения на nginx + php-fpm сразу же падает посещаемость сайта

12
Scumtron
На сайте с 14.01.2008
Offline
166
2382

Здравствуйте,

Хочу перевести сайт с nginx+apache+php(модуль Apache) на nginx+php-fpm, но после переключения сразу же падает онлайн, почти в два раза, видимо, посетители получают какую-то ошибку, но я не могу ее отследить. В логах ошибок сайта, пусто, а в access тоже ничего подозрительного, все стандартно, коды 301, 302 и 200 с положительной длиной ответа. Подскажите пожалуйста, как диагностировать проблему в таком случае, на что обратить внимание?

VPS сервер на VMware 1x2.4Ghz, 2GB RAM, 10GB SSD, Debian 8, ISPmanager 5 Lite, трафик 20.000 в сутки.

Онлайн по GA:

Статус Nginx:


Active connections: 489
server accepts handled requests
230680 230680 952506
Reading: 0 Writing: 9 Waiting: 465

Сайт работает на почти дефолтных настройках:


user www-data;
worker_processes auto;
timer_resolution 100ms;
worker_rlimit_nofile 65000;
worker_priority -5;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
multi_accept on;
use epoll;
}

http {
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;
access_log off;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;

proxy_buffers 8 16k;
proxy_buffer_size 32k;

server_names_hash_bucket_size 128;
keepalive_timeout 30 15;
send_timeout 30s;
reset_timedout_connection on;

gzip_static on;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_min_length 1000;
gzip_proxied any;
gzip_comp_level 4;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/json application/xml application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;

open_file_cache max=100000 inactive=40s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/vhosts/*/*;
server {
server_name localhost;
disable_symlinks if_not_owner;
listen 80;
include /etc/nginx/vhosts-includes/*.conf;
location @fallback {
error_log /dev/null crit;
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://127.0.0.1:8080 /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
access_log off ;
}
}
}

C Apache:


server {
server_name site.com www.site.com;
charset UTF-8;
disable_symlinks if_not_owner from=$root_path;
index index.php index.html;
root $root_path;
set $root_path /var/www/site/data/www/site.com;
error_log /var/www/httpd-logs/site.com.error.log notice;
include /etc/nginx/vhosts-includes/*.conf;
location / {
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
try_files $uri $uri/ @fallback;
expires max;
}
location / {
try_files /does_not_exists @fallback;
}
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @fallback;
}
}
location @fallback {
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://127.0.0.1:8080 /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
access_log off ;
add_header Vary "User-Agent";
}
ssi on;
access_log off ;
listen ip:80;
}

С php-fpm:


server {
server_name site.com www.site.com;
charset UTF-8;
disable_symlinks if_not_owner from=$root_path;
index index.php;
error_page 404 /404.php;
root $root_path;
set $root_path /var/www/site/data/www/site.com;
access_log /var/www/httpd-logs/site.com.access.log ;
error_log /var/www/httpd-logs/site.com.error.log notice;
include /etc/nginx/vhosts-includes/*.conf;
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}
}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f admin@site.com";
fastcgi_pass unix:/var/www/php-fpm/site.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
add_header Vary "User-Agent";
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|ttf|swf|woff)$ {
expires max;
log_not_found off;
access_log off;
}
location ~ /\. {
deny all;
return 404;
}
ssi on;
listen ip:80;
}

Настройки пула fpm:


pm = dynamic
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_children = 15
pm.max_spare_servers = 5
Выделенные серверы в Европе. Доставка видео контента. https://kvs-service.com
lonelywoolf
На сайте с 23.12.2013
Offline
151
#1
Scumtron:
но после переключения сразу же падает онлайн, почти в два раза, видимо, посетители получают какую-то ошибку, но я не могу ее отследить

Может, встают в очередь?

pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_children = 15
pm.max_spare_servers = 5

По мне с таким онлайном вот здесь надо бы увеличить лимиты

Платный и бесплатный хостинг с защитой от DDoS (http://aquinas.su)
Scumtron
На сайте с 14.01.2008
Offline
166
#2

lonelywoolf, увеличивал "pm.max_children" до 30, потом, до 60, не помогает.

K5
На сайте с 21.07.2010
Offline
209
#3

может у вас апач соединения сутками не закрывает, они и считаются как "онлайн" - настройки количества процессов пхп-фпм привели, апач - нет.

---------- Добавлено 10.02.2016 в 18:40 ----------

опять же 2Гб / 222чела = 9Мб и это без учета затраченной памяти на мускл, нгикс и прочие процессы??? что за скрипт там у вас 😕

видимо правильнее

kgtu5:
может у вас апач соединения сутками не закрывает...
аська 45два48499два записки на работе (http://memoryhigh.ru) помогу с сайтом, удалю вирусы, настрою впс -> отзывы ТУТ (/ru/forum/836248) и ТАМ (http://www.maultalk.com/topic140187.html) !!!всегда проверяйте данные людей, которые сами пишут вам в аську или скайп!!!
AGHost
На сайте с 16.11.2011
Offline
115
#4

Scumtron, попробуйте так


pm = ondemand
pm.max_children = ...
pm.process_idle_timeout = 20

Смотрите лог ошибок php-fpm и выявляйте причину, скорей всего просто не хватает php-fpm процессов. Слишком много ожидающих соединений.

8 лет на рынке услуг хостинга - https://agho.st (https://agho.st)
Andreyka
На сайте с 19.02.2005
Offline
822
#5

Чтоб найти причину - сопоставьте логи сервера с ошибками по GA. Чтоб исправить - наймите специалиста.

Простыми настройками мало чего добьетесь.

Не стоит плодить сущности без необходимости
Scumtron
На сайте с 14.01.2008
Offline
166
#6

Нанять специалиста - не проблема, но мне самому надо в этом разобраться, есть интерес к этой тематике.

kgtu5:
может у вас апач соединения сутками не закрывает, они и считаются как "онлайн" - настройки количества процессов пхп-фпм привели, апач - нет.

GA онлайн показывает более реальный, по статистике li.ru в два раза выше.

Апач на дефолтных настройках, которые ISPmanager 5 lite устанавливает.

kgtu5:
опять же 2Гб / 222чела = 9Мб и это без учета затраченной памяти на мускл, нгикс и прочие процессы??? что за скрипт там у вас 😕

http://www.kernel-video-sharing.com/ru/custom/

AGHost:
Слишком много ожидающих соединений.

Вы имеете ввиду Waiting: 465? Я не знаю какое соотношение Waiting является нормальным, но обратил внимание, что у всех кто приводит примеры статусов Nginx, это параметр является близким к значению Active connections.

AGHost
На сайте с 16.11.2011
Offline
115
#7

Scumtron, статистика в php-fpm включена?

pm.status_path = /status
ping.path = /ping
ping.response = pong
Scumtron
На сайте с 14.01.2008
Offline
166
#8

Нет, я пока вернулся на apache, хочу разобраться в терминологии и где правильно "закручивать" :)

AGHost
На сайте с 16.11.2011
Offline
115
#9

Киньте сюда блок из apache.conf с выбранным MPM.

Scumtron
На сайте с 14.01.2008
Offline
166
#10

Кстати, нашел объяснение по статусам Nginx , получается, что значение Waiting нормальное и на него не стоит обращать внимание.

Еще интересно то, что в apache.conf нет блока MPM вообще, (в ISPsystem решили, что он тут лишний?) я его добавил сейчас самостоятельно:


<IfModule prefork.c>
MinSpareServers 5
MaxSpareServers 10
MaxClients 130
MaxRequestsPerChild 4000
</IfModule>

Как MPM правильно указывается? <IfModule Mpm_prefork_module>?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий