nginx+php-fpm -> 500-я ошибка

12
K
На сайте с 12.07.2006
Offline
295
Kpd
6622

Есть сервер под FreeBSD. nginx 0.8.53, php-fpm 0.5.14, PHP 5.2.14, XCache v1.3.1

Под нагрузкой (>20 запросов в секунду) nginx часто выдает 500-ю ошибку (~ 0.5% всех запросов). Не могу определить, из-за чего. В логе php ничего интересного нет. В логе php-fpm только notice-ы (много)

Oct 26 10:27:38.889192 [NOTICE] fpm_got_signal(), line 48: received SIGCHLD
Oct 26 10:27:38.889259 [NOTICE] fpm_children_bury(), line 215: child 68864 (pool default) exited with code 0 after 483.592254 seconds from start
Oct 26 10:27:38.889643 [NOTICE] fpm_children_make(), line 352: child 69352 (pool default) started

Подозреваю, что затык на уровне php-fpm, не хватает ему чего-то для обработки всех запросов. Постепенно увеличивал max_children, эффект не дало (или очень незначительный).

Вот кусок конфига php-fpm.

Process manager settings

<value name="pm">

Sets style of controling worker process count.
Valid values are 'static' and 'apache-like'
<value name="style">static</value>

Sets the limit on the number of simultaneous requests that will be served.
Equivalent to Apache MaxClients directive.
Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
Used with any pm_style.
<value name="max_children">24</value>

Settings group for 'apache-like' pm style
<value name="apache_like">

Sets the number of server processes created on startup.
Used only when 'apache-like' pm_style is selected
<value name="StartServers">20</value>

Sets the desired minimum number of idle server processes.
Used only when 'apache-like' pm_style is selected
<value name="MinSpareServers">5</value>

Sets the desired maximum number of idle server processes.
Used only when 'apache-like' pm_style is selected
<value name="MaxSpareServers">35</value>

</value>

</value>

Set open file desc rlimit
<value name="rlimit_files">1024</value>

Set max core size rlimit
<value name="rlimit_core">0</value>

Что тут можно подкрутить?

M
На сайте с 24.10.2011
Offline
173
#1

а в логе nginx что? переменная workers_rlimit_nofile есть? если да, то какое значение?

pupseg
На сайте с 14.05.2010
Offline
347
#2

что пишет workers_rlimit_nofile

что стоит в max_connetions ?

покажите nginx.conf

Качественная помощь в обслуживании серверов. (/ru/forum/661100) Бесплатных консультаций не даю, не помогаю, не обучаю. Минималка от 100$. Как пропатчить KDE-просьба не спрашивать. Есть форумы (http://linux.org.ru) и полезные сайты (http://www.opennet.ru/).
K
На сайте с 12.07.2006
Offline
295
Kpd
#3

В логе nginx записи типа

66.249.66.52 - - [26/Oct/2011:10:29:22 +0400] "GET /guest/ HTTP/1.1" 502 383 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
michaek:
переменная workers_rlimit_nofile ест

Нет

З.Ы. В названии темы ошибся, ошибка 502-я.

Kpd добавил 26-10-2011 в 11:00

pupseg:
что стоит в max_connetions ?

Это в каком конфиге?

nginx.conf

user www;

worker_processes 16;

pid /var/run/nginx.pid;

events {
worker_connections 2048;
use kqueue;
}


http {
include 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"';

error_log /var/log/nginx/error.log debug;
access_log /dev/null;

client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;

client_header_buffer_size 4k;
large_client_header_buffers 8 12k;
client_max_body_size 8m;

gzip on;
gzip_min_length 1100;
gzip_buffers 12 32k;
gzip_types text/plain;

output_buffers 4 32k;
postpone_output 1460;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
#send_lowat 12000;

server_tokens off;

...

location ~ \.php$ {
access_log /var/log/nginx/domains/site.ru.log;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/user/domains/site.ru/public_html$fastcgi_script_name;
include fastcgi_params;

source_charset windows-1251;
}
# ulimit -a
cpu time (seconds, -t) unlimited
file size (512-blocks, -f) unlimited
data seg size (kbytes, -d) 4194304
stack size (kbytes, -s) 524288
core file size (512-blocks, -c) unlimited
max memory size (kbytes, -m) unlimited
locked memory (kbytes, -l) unlimited
max user processes (-u) 5547
open files (-n) 11095
virtual mem size (kbytes, -v) unlimited
sbsize (bytes, -b) unlimited

+

в логе ошибок nginx

upstream prematurely closed connection while reading response header from upstream
retexica
На сайте с 28.07.2011
Offline
9
#4

Поменяйте:

<value name="max_children">24</value>

На:

<value name="max_children">200</value>
K
На сайте с 12.07.2006
Offline
295
Kpd
#5
retexica:
Поменяйте:
На:

А потом создавать тему "Падает mysql"? :)

Я не знаю всех тонкостей настройки Php-fpm, но понимаю, что всё взаимосвязано. Увеличение количества "детей" увеличивает нагрузку на mysql, mysql тормозит все запросы (если не падает совсем) и опять приходим к исходной проблеме. Должно быть более тонкое решение.

retexica
На сайте с 28.07.2011
Offline
9
#6
Kpd:
А потом создавать тему "Падает mysql"? :)
Я не знаю всех тонкостей настройки Php-fpm, но понимаю, что всё взаимосвязано. Увеличение количества "детей" увеличивает нагрузку на mysql, mysql тормозит все запросы (если не падает совсем) и опять приходим к исходной проблеме. Должно быть более тонкое решение.

Не нужно подменять понятия, больше детей - больше потребление памяти при большем количестве запросов требующих обработки в бекенде. Не исключено что php-fpm выдавит при этом из памяти mysql, который, как теперь вы сообщили, находится у вас на том же хосте. Но вобщем то это и есть администрирование - нахождение оптимальных параметров для работы ПО при определенных ресурсах под определенной, в рамках разумных пределов, нагрузке. Дерзайте.

Andreyka
На сайте с 19.02.2005
Offline
822
#7

ТС, у тебя неправильный подход к решению задачи.

Не надо дергать конфиги - найди сначала причину ошибки.

Потом ее решай.

Не стоит плодить сущности без необходимости
M
На сайте с 24.10.2011
Offline
173
#8
Andreyka:
ТС, у тебя неправильный подход к решению задачи.
Не надо дергать конфиги - найди сначала причину ошибки.
Потом ее решай.

либо найти того, кто найдет причину

K
На сайте с 12.07.2006
Offline
295
Kpd
#9
Andreyka:
найди сначала причину ошибки.

Подскажите алгоритм поиска причины ошибок.

M
На сайте с 24.10.2011
Offline
173
#10
Kpd:
Подскажите алгоритм поиска причины ошибок.

читать логи, править конфиги

12

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