rx ring, max_backlog 및 max_syn_backlog 크기를 확인하는 방법


41

문제 해결 및 조정 과정에서 종종 다음 Linux 커널 설정에 대해 생각합니다.

net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn

이외에 fs.file-max, net.ipv4.ip_local_port_range, net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, 그리고 net.ipv4.tcp_wmem, 그들은 당신이 동시성의 높은 수준에 대한 상자를 조정하는 경우와 혼란에 중요한 노브 것 같다.

내 질문 : 각 대기열에 얼마나 많은 항목이 있는지 확인하려면 어떻게해야합니까? 일반적으로 사람들은 방금 초고속으로 설정했지만 향후 실패를 예측하고 사용자가 눈에 띄게 표시하기 전에 문제를 포착 할 수 있도록 대기열 크기를 기록하고 싶습니다.


이것은 멋진 질문입니다. 인 캐스트 문제와 고해상도 TCP 재전송에 관심이 있습니다.
dhchdhd

답변:


29

나도 이것을 궁금해하고 귀하의 질문에 동기를 부여했습니다!

나는 당신이 열거 한 각각의 큐에 얼마나 관련이있는 정보를 가지고 올 수 있는지 모았습니다. 의견 / 피드백을 환영합니다. 모니터링 기능이 향상되어 관리가 쉬워졌습니다!

net.core.somaxconn

net.ipv4.tcp_max_syn_backlog

net.core.netdev_max_backlog

$ netstat -an | grep -c SYN_RECV 

큐의 현재 전체 연결 수를 표시합니다. 모니터링 응용 프로그램에서 폴링하려는 경우 포트 당이를 연결 해제하고 snmpd.conf의 exec 문에 넣을 수 있습니다.

에서:

netstat -s

다음은 대기열에서 요청을 보는 빈도를 보여줍니다.

146533724 packets directly received from backlog
TCPBacklogDrop: 1029
3805 packets collapsed in receive queue due to low socket buffer

fs.file-max

에서:

http://linux.die.net/man/5/proc

$ cat /proc/sys/fs/file-nr
2720    0       197774

이 (읽기 전용) 파일은 현재 열린 파일 수를 제공합니다. 할당 된 파일 핸들 수, 사용 가능한 파일 핸들 수 및 최대 파일 핸들 수의 세 가지 숫자가 포함됩니다.

net.ipv4.ip_local_port_range

서비스 제외 목록 (netstat -an | grep LISTEN)을 작성할 수있는 경우 임시 활동에 사용되는 연결 수를 추론 할 수 있습니다.

netstat -an | egrep -v "MYIP.(PORTS|IN|LISTEN)"  | wc -l

또한 SNMP에서 모니터링해야합니다.

TCP-MIB::tcpCurrEstab.0

이 트리에서 볼 수있는 모든 상태에 대한 통계를 수집하는 것도 흥미로울 수 있습니다 (확립 / time_wait / fin_wait / etc).

TCP-MIB::tcpConnState.*

net.core.rmem_max

net.core.wmem_max

setsockopt 요청을 위해 시스템을 dtrace / strace해야합니다. 이러한 요청에 대한 통계는 달리 추적되지 않는다고 생각합니다. 이것은 실제로 내 이해에서 변화하는 가치가 아닙니다. 배포 한 응용 프로그램에 표준 금액이 필요할 수 있습니다. strace로 애플리케이션을 '프로파일'하고 그에 따라이 값을 구성 할 수 있다고 생각합니다. (논의하다?)

net.ipv4.tcp_rmem

net.ipv4.tcp_wmem

한계에 얼마나 근접했는지 추적하려면 tx_queue 및 rx_queue 필드의 평균 및 최대를 정기적으로 확인해야합니다.

# cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
   0: 00000000:0FB1 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 262030037 1 ffff810759630d80 3000 0 0 2 -1                
   1: 00000000:A133 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 262029925 1 ffff81076d1958c0 3000 0 0 2 -1                

이와 관련된 오류를 추적하려면

# netstat -s
    40 packets pruned from receive queue because of socket buffer overrun

또한 SNMP를 통해 글로벌 '버퍼'풀을 모니터링해야합니다.

HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: Memory Buffers
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 74172456
HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 51629704

2

SystemTap을 사용하여 해당 데이터를 얻을 수 있다고 생각합니다. 다음은 Redhat 참조 매뉴얼 (pdf) 입니다. 도있다 초보자 가이드 (PDF 파일) .

이 도구는 데이터를 얻을 수있을 정도로 다재다능합니다. 특히 probe::netdev.rx들어오는 항목에 대한 정보를 제공하는 것 같습니다. 이제는 버퍼에있는 큐의 순 크기 또는 사물을 세는 것만 찾아야합니다. 대기열을 떠나는 중…

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.