Welcome! Log In Create A New Profile

Advanced

Re: снова про утечку сокетов

Maxim Dounin
June 21, 2011 09:50PM
Hello!

On Wed, Jun 22, 2011 at 12:01:28AM +0400, Костенко Евгений wrote:

> Несколько месяцев назад задавал в этой рассылке вопрос про aio и утечку
> сокетов.
> Maxim Dounin подсказал копать в сторону gdb и содержания внутренних структур
> nginx (http://forum.nginx.org/read.php?21,171856,173232#msg-173232)
> В другом обсуждении с участием Игоря нашел как выдрать из coredump'ов нужные
> структуры (http://forum.nginx.org/read.php?21,16913,17565#msg-17565)

Аналогичный набор команд для gdb доступен по приведённой мной
ссылке в исходном треде:

http://wiki.nginx.org/Debugging#Socket_leaks

Там же есть инструкции, как получить идентификатор соединения
чтобы выцепить нужные данные из debug log'а.

> Собственно на рестарте появилось куча "корок" и жалоб в глобальном error.log
> на "open socket #N left in connection M"
> Запускаем gdb и смотрим что внутри
>
> (gdb) qq 34

Покажите сообщение об ошибке и имя используемого core-файла, дабы
не возникало сомнений в правильности выбора числа 34.

> $18 = {len = 43, data = 0x801d2fb5c "/bla/bla/archive1.zip"}

Здесь "/bla/bla/archive1.zip" подставлено руками, или на самом
деле имеет место повреждение данных запроса?

> $19 = {len = 46, data = 0x8099ac400 "GET /a52babab9bb8355b156358f434627bb0
> HTTP/1.1\r\nAccept"}
> discard_body 0
> lingering_close 0
> lingering_time 0
> keepalive 1
> $20 = 0x46d7a7 <ngx_http_upstream_rd_check_broken_connection>
> $21 = 0x470f3b <ngx_http_upstream_process_downstream>
> $22 = 0x4b79fa "reading upstream"
> status 200
> count 1
> blocked 0
> sent 33580
> length -1
> Cannot access memory at address 0x0
>
> (gdb) qq 35
> $23 = {len = 26, data = 0x801d33c64 "/bla/bla/archive2.zip"}
> $24 = {len = 46, data = 0x801852400 "GET /1d5859a513539b9b412d534212728832
> HTTP/1.1\r\nUser-Agent"}
> discard_body 0
> lingering_close 0
> lingering_time 0
> keepalive 1
> $25 = 0x459b5b <ngx_http_test_reading>
> $26 = 0x4596ac <ngx_http_writer>
> $27 = 0x0
> status 206
> count 1
> blocked 0
> sent 242367
> length -1
> Cannot access memory at address 0x0
>
> Смена версии ОС с 8.0 на 8.1/8.2, как собссно и обновление nginx с 0.8.x до
> 1.0.x не дает результата
> За сутки количество writing соединений зашкаливает на 20-30тыс, хотя сутя по
> netstat таковых не более тысячи
>
> Подскажите пожалуйста, куда дальше копать и что смотреть?

Для начала покажите строки логов и имена корок, а также вывод

set $c = &ngx_cycle->connections[456]
p $c->log->connection
p *$c
set $r = (ngx_http_request_t *) $c->data
p *$r

в gdb, где 456 - номер соединения из строки лога про "open socket
#123 left in connection 456".

Но скорее всего это ситуацию не прояснит, и нужен будет debug log
для соответствующих запросов. Т.е. включать debug log и
"debug_points abort;", после появления сокетов в состоянии CLOSED
делать reload (можно - выключив debug log), потом получать в gdb
идентификатор соединения и смотреть логи.

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

снова про утечку сокетов

n0guest June 21, 2011 04:04PM

Re: снова про утечку сокетов

Maxim Dounin June 21, 2011 09:50PM

Re: снова про утечку сокетов

n0guest June 22, 2011 01:54AM

Re: снова про утечку сокетов

Maxim Dounin June 22, 2011 09:56AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 181
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready