Re: Master процесс nginx 0.6.38 съедает всю доступную память

Одинцов Павел pavel.odintsov at googlemail.com
Mon Sep 14 12:32:48 MSD 2009


Добрый день!

Вот strace.

close(783)                              = 0
close(784)                              = 0
close(785)                              = 0
close(786)                              = 0
close(787)                              = 0
close(788)                              = 0
close(789)                              = 0
close(790)                              = 0
close(791)                              = 0
close(792)                              = 0
close(793)                              = 0
close(794)                              = 0
close(795)                              = 0
close(796)                              = 0
close(797)                              = 0
close(798)                              = 0
close(800)                              = 0
close(801)                              = 0
close(802)                              = 0
close(1600)                             = 0
close(1601)                             = 0
close(1602)                             = 0
close(1603)                             = 0
close(1604)                             = 0
close(1605)                             = 0
socketpair(PF_FILE, SOCK_STREAM, 0, [9, 10]) = 0
ioctl(9, FIONBIO, [1])                  = 0
ioctl(10, FIONBIO, [1])                 = 0
ioctl(9, FIOASYNC, [1])                 = 0
fcntl(9, F_SETOWN, 16321)               = 0
fcntl(9, F_SETFD, FD_CLOEXEC)           = 0
fcntl(10, F_SETFD, FD_CLOEXEC)          = 0
clone(child_stack=0,
flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x2b2a7b0d5360) = 22337
sendmsg(7, {msg_name(0)=NULL,
msg_iov(1)=[{"\1\0\0\0\0\0\0\0AW\0\0\0\0\0\0\2\0\0\0\0\0\0\0\t\0\0\0\0\0\36!",
32}], msg_controllen=24, {cmsg_len=20, cmsg_level=SOL_SOCKET,
cmsg_type=SCM_RIGHTS, {9}}, msg_flags=0}, 0) = 32
sendmsg(3, {msg_name(0)=NULL,
msg_iov(1)=[{"\1\0\0\0\0\0\0\0AW\0\0\0\0\0\0\2\0\0\0\0\0\0\0\t\0\0\0\0\0\36!",
32}], msg_controllen=24, {cmsg_len=20, cmsg_level=SOL_SOCKET,
cmsg_type=SCM_RIGHTS, {9}}, msg_flags=0}, 0) = 32
sendmsg(805, {msg_name(0)=NULL,
msg_iov(1)=[{"\1\0\0\0\0\0\0\0AW\0\0\0\0\0\0\2\0\0\0\0\0\0\0\t\0\0\0\0\0\36!",
32}], msg_controllen=24, {cmsg_len=20, cmsg_level=SOL_SOCKET,
cmsg_type=SCM_RIGHTS, {9}}, msg_flags=0}, 0) = 32
sendmsg(3, {msg_name(0)=NULL,
msg_iov(1)=[{"\3\0\0\0\0\0\0\0AW\0\0\0\0\0\0\2\0\0\0\0\0\0\0\377\377\377\377\0\0\36!",
32}], msg_controllen=0, msg_flags=0}, 0) = 32
rt_sigsuspend([])                       = ? ERESTARTNOHAND (To be restarted)
--- SIGCHLD (Child exited) @ 0 (0) ---
gettimeofday({1252914806, 264791}, NULL) = 0
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG, NULL) = 9115
wait4(-1, 0x7fff33ef85c4, WNOHANG, NULL) = 0
rt_sigreturn(0xffffffffffffffff)        = -1 EINTR (Interrupted system call)
gettimeofday({1252914806, 265065}, NULL) = 0
close(805)                              = 0
close(806)                              = 0
sendmsg(7, {msg_name(0)=NULL,
msg_iov(1)=[{"\2\0\0\0\0\0\0\0\233#\0\0\0\0\0\0\3\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0",
32}], msg_controllen=0, msg_flags=0}, 0) = 32
sendmsg(3, {msg_name(0)=NULL,
msg_iov(1)=[{"\2\0\0\0\0\0\0\0\233#\0\0\0\0\0\0\3\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0",
32}], msg_controllen=0, msg_flags=0}, 0) = 32
sendmsg(9, {msg_name(0)=NULL,
msg_iov(1)=[{"\2\0\0\0\0\0\0\0\233#\0\0\0\0\0\0\3\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0",
32}], msg_controllen=0, msg_flags=0}, 0) = 32
rt_sigsuspend([])                       = ? ERESTARTNOHAND (To be restarted)
--- SIGIO (I/O possible) @ 0 (0) ---
gettimeofday({1252914806, 266093}, NULL) = 0
rt_sigreturn(0x7fff33ef8560)            = -1 EINTR (Interrupted system call)
gettimeofday({1252914806, 266197}, NULL) = 0
rt_sigsuspend([])                       = ? ERESTARTNOHAND (To be restarted)
--- SIGCHLD (Child exited) @ 0 (0) ---
gettimeofday({1252914808, 891963}, NULL) = 0
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG, NULL) = 22306
wait4(-1, 0x7fff33ef85c4, WNOHANG, NULL) = 0
rt_sigreturn(0xffffffffffffffff)        = -1 EINTR (Interrupted system call)
gettimeofday({1252914808, 892239}, NULL) = 0
close(3)                                = 0
close(4)                                = 0
sendmsg(7, {msg_name(0)=NULL,
msg_iov(1)=[{"\2\0\0\0\0\0\0\0\"W\0\0\0\0\0\0\1\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0",
32}], msg_controllen=0, msg_flags=0}, 0) = 32
sendmsg(9, {msg_name(0)=NULL,
msg_iov(1)=[{"\2\0\0\0\0\0\0\0\"W\0\0\0\0\0\0\1\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0",
32}], msg_controllen=0, msg_flags=0}, 0) = 32
rt_sigsuspend([])                       = ? ERESTARTNOHAND (To be restarted)
--- SIGIO (I/O possible) @ 0 (0) ---
gettimeofday({1252914808, 892960}, NULL) = 0
rt_sigreturn(0x7fff33ef8560)            = -1 EINTR (Interrupted system call)
gettimeofday({1252914808, 893066}, NULL) = 0
rt_sigsuspend([])                       = ? ERESTARTNOHAND (To be restarted)
--- SIGCHLD (Child exited) @ 0 (0) ---
gettimeofday({1252914825, 575495}, NULL) = 0
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG, NULL) = 22288
wait4(-1, 0x7fff33ef85c4, WNOHANG, NULL) = 0
rt_sigreturn(0xffffffffffffffff)        = -1 EINTR (Interrupted system call)
gettimeofday({1252914825, 575770}, NULL) = 0
close(7)                                = 0
close(8)                                = 0
sendmsg(9, {msg_name(0)=NULL,
msg_iov(1)=[{"\2\0\0\0\0\0\0\0\20W\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0",
32}], msg_controllen=0, msg_flags=0}, 0) = 32
rt_sigsuspend([])                       = ? ERESTARTNOHAND (To be restarted)
--- SIGIO (I/O possible) @ 0 (0) ---
gettimeofday({1252914825, 576096}, NULL) = 0
rt_sigreturn(0x7fff33ef8560)            = -1 EINTR (Interrupted system call)
gettimeofday({1252914825, 576201}, NULL) = 0
rt_sigsuspend([] <unfinished ...>
+++ killed by SIGKILL +++

а тут мы его уже сами ложим по killall -9, чтобы оживить систему.


2009/9/13 Igor Sysoev <is at rambler-co.ru>:
> On Sun, Sep 13, 2009 at 05:52:04PM +0500, Одинцов Павел wrote:
>
>> Добрый вечер!
>>
>> Т.е. при вот такой конфигурации (у меня именно так):
>>
>> http {
>>     ...
>>     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;
>>
>> nginx будет выедать гигабайты памяти, но если отключить логгирование
>> access.log он начнет работать нормально? Да, кстати, а error.log также
>> придется выключить? Уж очень не хочется этого делать :/
>
> Нет, от этого память течь не должна.
>
>> 2009/9/13 Noon es Shadow <noonesshadow at gmail.com>:
>> > Ну логов которые не для конкретного server {} а общие для http{}
>> >
>> > 12 сентября 2009 г. 23:59 пользователь Одинцов Павел
>> > <pavel.odintsov at googlemail.com> написал:
>> >>
>> >> Добрый вечер!
>> >>
>> >> То есть "общих для конфигурации" ?
>> >>
>> >> 2009/9/13 Noon es Shadow <noonesshadow at gmail.com>:
>> >> > У меня такое было из-за записи логов общих для конфигурации
>> >> >
>> >> > 12 сентября 2009 г. 23:15 пользователь Одинцов Павел
>> >> > <pavel.odintsov at googlemail.com> написал:
>> >> >>
>> >> >> 2009/9/13 Igor Sysoev <is at rambler-co.ru>:
>> >> >> > On Sun, Sep 13, 2009 at 12:31:52AM +0500, Одинцов Павел wrote:
>> >> >> >
>> >> >> >> Добрый день!
>> >> >> >>
>> >> >> >> Большое спасибо за развернутый ответ, отвечаю ниже.
>> >> >> >>
>> >> >> >> 2009/9/12 Gena Makhomed <gmm at csdoc.com>:
>> >> >> >> > On Monday, September 7, 2009 at 23:18:21, Одинцов Павел wrote:
>> >> >> >> >
>> >> >> >> > ОП> Имеется очень противная проблема, nginx 0.6.38 (epel
>> >> >> >> > репозиторий)
>> >> >> >> > ОП> стоит проксей перед хостинговой Апачей и попутно раздает
>> >> >> >> > статику;
>> >> >> >> > ОП> изредка на паре машин из полутора десятков nginx (master
>> >> >> >> > процесс)
>> >> >> >> > ОП> начинает жутко поедать память и в итоге через пару минут
>> >> >> >> > сваливает
>> >> >> >> > ОП> машину. Подозрения о причинах такого поведения есть в сторону
>> >> >> >> > буферов
>> >> >> >> > ОП> и проксирования больших файлов от Апача, но тут ничего толком
>> >> >> >> > не
>> >> >> >> > ОП> получилось понять.  Помогайте :(
>> >> >> >> >
>> >> >> >> > насколько часто ему посылается SIGHUP, SIGUSR1 и другие сигналы?
>> >> >> >>
>> >> >> >> SIGHUP посылается весьма часто (до десятков раз в час и больше),
>> >> >> >> т.к.
>> >> >> >> клиенты реконфигурируют сайты и для этого необходим мягкий релоад
>> >> >> >> nginx; другие сигналы не используются.
>> >> >> >
>> >> >> > А насколько вырастает мастер после сигнала ?
>> >> >> В том и проблема, что ни на сколько, много раз дергал руками, но после
>> >> >> релоада размер восстанавливается прежний.
>> >> >> > Странно, что этот размер не передаётся воркерам. Или передаётся ?
>> >> >> Не передается, растет только Мастер, что и странно.
>> >> >> >
>> >> >> >> > worker_cpu_affinity 0001 0010 0100 1000;
>> >> >> >>
>> >> >> >> Вот за это спасибо, не знал, что воркеры можно явно повесить на
>> >> >> >> отдельные ядра.
>> >> >> >
>> >> >> > Сейчас worker_cpu_affinity сделан непраивльно, поэтому его лучше не
>> >> >> > использовать.
>> >> >>
>> >> >> Понятно, откатываемс.
>> >> >> >
>> >> >> >
>> >> >> > --
>> >> >> > Игорь Сысоев
>> >> >> > http://sysoev.ru
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> С уважением, Одинцов Павел
>> >> >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> С уважением, Одинцов Павел
>> >
>> >
>>
>>
>>
>> --
>> С уважением, Одинцов Павел
>
> --
> Игорь Сысоев
> http://sysoev.ru
>
>



-- 
С уважением, Одинцов Павел





More information about the nginx-ru mailing list