Ubuntu 14.04 TCP 설정 해시 테이블 항목

Ubuntu 14.04 TCP 설정 해시 테이블 항목

약간의 배경

저는 트래픽이 많은 서버 두 대를 실행하고 있습니다. 하나는 ubuntu 12.04(linux 3.2.0-69-generic)이고 다른 하나는 ubuntu 14.04(linux 3.13.0-52-generic)입니다. 나는 지금 둘 다 확보하려고 노력하고 있습니다. 둘 다 매우 유사한 하드웨어 리소스를 가지고 있습니다(CPU 수는 동일하지만 14.04에 16GB가 있을 때 12.04에는 RAM이 8GB만 있음).

ufw 방화벽을 활성화하고 싶었지만 nf_conntrack 테이블이 가득 차는 문제에 직면했습니다. 기본적으로 패킷이 삭제되었습니다.

시간 초과를 낮추고 테이블 크기와 버킷 수를 늘려 이에 대한 해결책을 찾았습니다. 그건:

net.netfilter.nf_conntrack_tcp_timeout_established = 600
net.netfilter.nf_conntrack_max = 196608
net.netfilter.nf_conntrack_buckets = 24576

이러한 값은 적절하게 업데이트되며 재부팅 후에도 유지됩니다. (보다이 블로그) 또한 conntrack_count가 기본값보다 훨씬 높게 증가하는 것을 볼 수 있으므로 이것이 두 서버 모두에서 작동한다고 확신합니다. 값은 한도 이하로 유지되므로 괜찮다고 확신합니다.

문제

12.04 서버는 부하가 높을 때 잘 작동하지만 14.04는 계속 패킷을 삭제하여 클라이언트 시간 초과를 발생시킵니다. 이제 14.04에서 부팅할 때 kern.log에서 다음 줄을 볼 수 있습니다.

TCP established hash table entries: 131072 (order: 8, 1048576 bytes)

12.04의 경우 다음과 같습니다.

TCP established hash table entries: 524288 (order: 11, 8388608 bytes)

14.04의 트래픽 양에 비해 이 테이블이 너무 작을 수 있기 때문에 이것이 내 서버가 패킷을 삭제하는 이유일 수 있다고 생각합니다.

그래서 이 크기를 설정하는 방법을 찾아보았고 thash_entries 매개변수를 찾았습니다.여기를 보아라설명을 위해). 그러나 sysctl로는 설정할 수 없습니다.

내 질문은 다음과 같습니다.

  1. 이 TCP 연결 테이블이 실제로 문제의 원인입니까? 아니면 다른 곳을 찾아봐야 할까요?
  2. 그렇다면 어떻게 설정하고 재부팅 후에도 살아남을 수 있습니까?

어떤 도움이라도 미리 감사드리며, 도움이 더 필요하면 주저하지 말고 저에게 문의해 주세요.

PS 저는 시스템 전문가라기보다는 개발자에 가깝기 때문에 자세한 답변을 주시면 감사하겠습니다 :)

답변1

높은 네트워크 처리량을 위해 Linux 커널을 조정하는 것은 균형을 기반으로 한 예술입니다.

연결 추적기 테이블을 늘리는 것은 괜찮지만 이는 잠재적으로 더 많은 소켓이 사용될 수 있음을 의미하며 이는 결국 시스템에 더 많은 파일 설명자가 필요하다는 의미이며 휠은 계속됩니다...

귀하의 경우 다음 커널 설정부터 시작하겠습니다.

net.core.somaxconn

그리고

fs.file-max

첫 번째는 커널이 유지할 열린 소켓의 양을 결정합니다. 두 번째는 커널이 지원할 사용된 파일 설명자의 양을 설정하는 데 사용됩니다.

그런 다음 추가로 조정할 수 있는 SYN 백로그가 있습니다.

net.ipv4.tcp_max_syn_backlog

서버에서 ACK를 대기할 수 있는 연결 양을 설정합니다.

net.ipv4.tcp_syncookies

SYN 백로그가 작동하려면 TCP SYN 쿠키를 활성화해야 합니다.

마지막으로 TIME_WAIT 연결 재사용을 활성화하는 등 몇 가지 조정이 가능합니다.

net.ipv4.tcp_tw_reuse

이렇게 하면 스파이크를 받을 때 열리는 "새" 소켓의 양이 잠재적으로 줄어들 수 있습니다.

이는 빙산의 일각일 뿐입니다. 대용량 Linux/Unix 시스템에 대한 저의 경험에 따르면 적절한 균형을 이루기 전에 몇 달 동안 조정해야 합니다.

추가 문제 해결에 도움이 /var/log/kern.log되도록 오류를 확인하세요 ./var/log/messages

커널 튜닝

높은 처리량 컴퓨팅 관리 가이드

관련 정보