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

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

문제 해결 및 조정 중에 다음 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_rmemnet.ipv4.tcp_wmem위해 상자를 조정할 때 조정해야 할 중요한 손잡이인 것 같습니다.

내 질문: 각 대기열에 몇 개의 항목이 있는지 어떻게 확인할 수 있나요? 일반적으로 사람들은 이 값을 매우 높게 설정하지만 저는 이러한 대기열 크기를 기록하여 향후 오류를 예측하고 사용자에게 명확한 방식으로 나타나기 전에 문제를 파악하는 데 도움을 주고 싶었습니다.

답변1

저도 이게 궁금했는데 님의 질문에 감동받았어요!

나열된 각 대기열에 대해 어떤 정보를 얻을 수 있는지, 그리고 각 대기열과 관련된 일부 정보를 수집했습니다. 의견/피드백을 환영합니다. 모니터링이 개선되면 관리가 더 쉬워질 것입니다!

네트워크코어.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.파일 최대값

에서:

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

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

TCP-MIB::tcpConnState.*

네트워크코어.rmem_max

네트워크코어.wmem_max

setockopt 요청을 받으려면 시스템을 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을 사용하여 해당 데이터를 얻을 수 있을 것 같습니다. 여기있어Red Hat 참조 매뉴얼(PDF) . 아직 하나 있어요초보자 가이드(PDF) .

이 도구는 해당 데이터를 얻을 수 있을 만큼 일반적으로 보입니다. 특히 probe::netdev.rx들어오는 항목에 대한 정보를 제공할 수 있는 것처럼 보입니다. 이제 버퍼에 있는 대기열의 순 크기를 찾거나 무언가가 떠난 것을 계산하기만 하면 됩니다. 대기열…

관련 정보