Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.26.230] |
|
Сообщ.
#1
,
|
|
|
Тут есть хорошее описание работы TCP backlog на ядре 2.2:
http://veithen.github.io/2014/01/01/how-tc...s-in-linux.html Есть ли возможность посмотреть какова заполненость очереди для определенного процесса, типа: backlog -pid 12345 ? |
Сообщ.
#2
,
|
|
|
Можно попробовать
netstat -ntp Потом погрипать нужный PID |
Сообщ.
#3
,
|
|
|
Каким образом из аутпута netstat я могу сделать вывод о текущем рамере очереди ESTABLISHED CONNECTIONs?
|
Сообщ.
#4
,
|
|
|
Цитата rlib @ рамере очереди ESTABLISHED CONNECTION Такой очереди, ЕМНИП, нет. Есть очереди входящие и исходящие. А про подсчет размеров может быть это поможет. Добавлено Но в такой постановке задачи типа "backlog -pid 12345" - не встречал утилит. Возможно самому придется писать, ибо если даже комбинации консольных утилит и как-то позволят извлечь информацию, это процесс небыстрый - о рилтайме забыть. В линухе вроде есть нечто типа auditd - может в ту сторону покопать. |
Сообщ.
#5
,
|
|
|
http://veithen.github.io/2014/01/01/how-tc...s-in-linux.html
The implementation uses two queues, a SYN queue (or incomplete connection queue) and an accept queue (or complete connection queue). Connections in state SYN RECEIVED are added to the SYN queue and later moved to the accept queue when their state changes to ESTABLISHED, i.e. when the ACK packet in the 3-way handshake is received. As the name implies, the accept call is then implemented simply to consume connections from the accept queue. In this case, the backlog argument of the listen syscall determines the size of the accept queue. For IPv4, the first line of code will actually call tcp_v4_syn_recv_sock in net/ipv4/tcp_ipv4.c, which contains the following code: if (sk_acceptq_is_full(sk)) goto exit_overflow; Собственно нужно добратся до структуры, которую прверяет функция sk_acceptq_is_full(sk) |
Сообщ.
#6
,
|
|
|
Цитата rlib @ Собственно нужно добратся до структуры, которую прверяет функция Это не даст ожидаемого. Вопрос был изначально "заполненность очереди для определенного процесса", но, если я правильно понял - очередей процессу ни кто не выделял и не создавал. Есть сокет(ы) которые открывает приложение и посредством них работает с цепочкой сетевых драйверов - и очереди в них (в дровах). Вот есть интересная статейка. |
Сообщ.
#7
,
|
|
|
http://lxr.free-electrons.com/source/include/net/sock.h#L798
socket_lock_t sk_lock; 344 struct sk_buff_head sk_receive_queue; 345 /* 346 * The backlog queue is special, it is always used with 347 * the per-socket spinlock held and requires low latency 348 * access. Therefore we special case it's implementation. 349 * Note : rmem_alloc is in this structure to fill a hole 350 * on 64bit arches, not because its logically part of 351 * backlog. 352 */ 353 struct { 354 atomic_t rmem_alloc; 355 int len; 356 struct sk_buff *head; 357 struct sk_buff *tail; 358 } sk_backlog; |