On Wed, Aug 29, 2007 at 12:05:49AM +0400, Alexey Rymonin wrote:
> >> >> Current function is ngx_devpoll_process_events
> >> >> 406 if (c->fd == -1) {
> >> >> (dbx) gdb on
> >> >>
> >> >> (dbx) p events
> >> >> events = 2
> >> >> (dbx) p i
> >> >> i = 1
> >> >> (dbx) p event_list[i]
> >> >> event_list[i] = {
> >> >> fd = 29
> >> >> events = 1
> >> >> revents = 1
> >> >> }
> >> >> (dbx) p ngx_cycle->files[event_list[i].fd]
> >> >> ngx_cycle->files[event_list[i].fd] = (nil)
> >>
> >> IS> p n
> >> IS> p change_list[0]
> >> IS> p change_list[1]
> >> IS> p change_list[2]
> >>
> >> (dbx) p n
> >> n = 59821U
> >> (dbx) p change_list[0]
> >> change_list[0] = {
> >> fd = 28
> >> events = 2048
> >> revents = 0
> >> }
> >> (dbx) p change_list[1]
> >> change_list[1] = {
> >> fd = 29
> >> events = 2048
> >> revents = 0
> >> }
> >> (dbx) p change_list[2]
> >> change_list[2] = {
> >> fd = 26
> >> events = 2048
> >> revents = 0
> >> }
>
> IS> В данном случае нельзя утверждать наверняка (это можно было бы при наличии
> IS> отладочного лога, но, боюсь, его трудно будет включить на нагрузке), но
> IS> у меня есть подозрение, что SUN опять облажался. На этот раз со старым
> IS> проверенным интерфейсом /dev/poll.
>
> IS> Значение n уже потеряно, но если change_list[1] относится к текущей
> IS> итерации, то это означает, что nginx удалил (2048 - POLLREMOVE) дескриптор
> IS> 29 из /dev/poll, и поставил NULL в ngx_cycle->files[29], а /dev/poll всё
> IS> равно вернул событие для этого дескриптора.
>
> Я ничего не могу сказать, для меня это темный лес.. единственное что на этот
> раз в корку упало
> сразу 2 рабочих процесса с интервалом в 3 секунды
>
> 2007/08/28 19:27:20 [alert] 846#0: worker process 19360 exited on signal 11
> (core dumped)
> 2007/08/28 19:27:23 [alert] 846#0: worker process 19358 exited on signal 11
> (core dumped)
Хорошо, посмотрим завтра на вторую.
> А если можно описать в общем причину ошибки, то можно попробовать засунуть с
> баг лист
> Сана, посмотрим что они ответят...
Ошибка выглядит так:
делаем POLLREMOVE для сокета,
закрываем сокет,
ioctl(DP_POLL) может вернуть события для этого сокета.
Я правильно понимаю, что это Solaris 10 ?
На более ранних у меня нет подобных баг-репортов, что говорит или о том,
что там nginx практически не использолвали, или же там не было этой ошибки.
> IS> А что показывают
>
> IS> p change_list[3]
> IS> p change_list[4]
> IS> p change_list[5]
> IS> p change_list[6]
> IS> p change_list[7]
>
> (dbx) p change_list[3]
> change_list[3] = {
> fd = 26
> events = 1
> revents = 0
> }
> (dbx) p change_list[4]
> change_list[4] = {
> fd = 11
> events = 2048
> revents = 0
> }
Похоже, больше 5 элементов не использовалось.
> (dbx) p change_list[5]
> change_list[5] = {
> fd = 0
> events = 0
> revents = 0
> }
> (dbx) p change_list[6]
> change_list[6] = {
> fd = 0
> events = 0
> revents = 0
> }
> (dbx) p change_list[7]
> change_list[7] = {
> fd = 7236416
> events = 0
> revents = 0
> }
А что показывает
p event_list[0]
?
--
Игорь Сысоев
http://sysoev.ru