Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: accept() failed (53: Software caused connection abort)
On 02.05.2012, at 20:26, Anton Yuzhaninov wrote:
> Есть несколько однотипных серверов с nginx.
> На одном из них в 10 раз больше сообщений
> accept() failed (53: Software caused connection abort)
> чем на других.
> Выяснить чем он отличается от других пока не получается.
>
> Вопрос - можно ли как то такие соединения отфильтровать из дампа трафика,
> чтобы на них посмотреть?
Если там freebsd и доступен dtrace, то можно попробовать зайти с другой
стороны: выяснить адрес и порт,
и по ним в дампе найти то, что хочется.
accept возвращается с ECONNABORTED в случае, если у соединения в backlog'е
установлен
флаг SBS_CANTRCVMORE. Устанавливают его socantrcvmore(), soisdisconnected() и
soisdisconnecting().
Нужно отловить, когда они вызываются с unaccepted сокетом в качестве аргумента
и вытащить адрес и порт.
Скрипт будет примерно таким (выглядит немного запутанно, т.к. приходится
реализовывать аналог getpeername):
#!/usr/sbin/dtrace -s
inline int SQ_INCOMP = 0x0800; /* unaccepted, incomplete connection */
inline int SQ_COMP = 0x1000; /* unaccepted, complete connection */
fbt::socantrcvmore_locked:entry / args[0]->so_qstate & (SQ_INCOMP|SQ_COMP) / {
family = args[0]->so_proto->pr_domain->dom_family;
sin_addr = &(((struct inpcb
*)(args[0])->so_pcb)->inp_inc.inc_ie.ie_dependfaddr.ie46_foreign.ia46_addr4);
sin_port = ((struct inpcb *)(args[0])->so_pcb)->inp_inc.inc_ie.ie_fport;
address = inet_ntop(family, (void *)sin_addr);
port = ntohs(sin_port);
printf("%-15s %-5d\n",address , port);
}
fbt::soisdisconnected:entry / args[0]->so_qstate & (SQ_INCOMP|SQ_COMP) / {
family = args[0]->so_proto->pr_domain->dom_family;
sin_addr = &(((struct inpcb
*)(args[0])->so_pcb)->inp_inc.inc_ie.ie_dependfaddr.ie46_foreign.ia46_addr4);
sin_port = ((struct inpcb *)(args[0])->so_pcb)->inp_inc.inc_ie.ie_fport;
address = inet_ntop(family, (void *)sin_addr);
port = ntohs(sin_port);
printf("%-15s %-5d\n",address , port);
}
fbt::soisdisconnecting:entry / args[0]->so_qstate & (SQ_INCOMP|SQ_COMP) / {
family = args[0]->so_proto->pr_domain->dom_family;
sin_addr = &(((struct inpcb
*)(args[0])->so_pcb)->inp_inc.inc_ie.ie_dependfaddr.ie46_foreign.ia46_addr4);
sin_port = ((struct inpcb *)(args[0])->so_pcb)->inp_inc.inc_ie.ie_fport;
address = inet_ntop(family, (void *)sin_addr);
port = ntohs(sin_port);
printf("%-15s %-5d\n",address , port);
}
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|