> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > Linux 커널 매개변수를 최적화하는 방법

Linux 커널 매개변수를 최적화하는 방법

WBOY
풀어 주다: 2023-05-11 18:58:21
앞으로
2778명이 탐색했습니다.

 고성능 WEB 서버로서 Nginx 서비스는 고성능 운영체제를 기반으로 하기 때문에 단순히 Nginx 자체의 매개변수를 조정하는 것만으로는 충분하지 않습니다.
 다음은 몇 가지 일반적인 Linux 커널 매개변수 최적화 방법입니다.

  • net.ipv4.tcp_max_tw_buckets

tcp 연결의 경우 서버와 클라이언트가 통신한 후 상태가 timewait로 변경됩니다. 서버 사용량이 매우 많고 연결 수가 특히 많은 경우 timewaits는 점점 더 커질 것입니다.
결국 일정량의 리소스를 차지하므로 최대값이 있어야 합니다. 이 값을 초과하면 시스템은 가장 빠른 연결을 삭제하므로 항상 일정 수준으로 유지됩니다.
이 값은 net.ipv4.tcp_max_tw_buckets 매개변수에 의해 결정됩니다.
CentOS7 시스템에서는 sysctl -a |grep tw_buckets를 사용하여 해당 값을 볼 수 있습니다. 기본값은 32768입니다.
8000으로 조정하는 등 적절하게 낮출 수 있습니다. 결국 이 상태에서 너무 많은 연결은 리소스를 소비하게 됩니다.
그러나 이 상태의 tcp 연결도 유용하므로 수십 또는 수백으로 조정하지 마세요.
동일한 클라이언트가 서버와 다시 통신하는 경우 다시 새 연결을 설정할 필요가 없습니다. 이 이전 채널을 사용하세요. 시간과 노력을 절약합니다.

  • net.ipv4.tcp_tw_recycle = 1

이 매개변수의 기능은 timewait 상태에서 연결을 빠르게 재활용하는 것입니다. 위에서는 timewait 상태에서 시스템이 자동으로 연결을 삭제한다고 언급했지만, 그러한 연결을 재사용한다면 더 좋지 않을까요?
따라서 이 매개변수를 1로 설정하면 timewait 상태의 연결을 빠르게 재활용할 수 있으므로 다음 매개변수와 함께 사용해야 합니다.

  • net.ipv4.tcp_tw_reuse = 1

새 TCP 연결에 대해 timewait 상태의 연결을 재사용하려면 이 매개변수를 1로 설정해야 합니다.

  • net.ipv4.tcp_syncookies = 1

tcp 3방향 핸드셰이크에서 클라이언트는 서버에 대한 syn 요청을 시작합니다.
클라이언트가 요청을 보낸 후 서버와의 연결을 직접 끊고 서버가 시작한 요청을 수락하지 않으면 서버는 여러 번 재시도합니다.
이 재시도 프로세스는 일정 시간 동안 지속됩니다(보통 더 오래 지속됩니다). 30초 이상) 이 상태에서 연결 수가 매우 많으면 서버가 많은 리소스를 소비하여 마비 현상이 발생합니다.
정상적인 연결이 들어올 수 없습니다. 이러한 악의적인 반 연결 동작을 실제로는 Syn Flood 공격이라고 합니다.
위에서 언급한 Syn Flood 공격을 피할 수 있는 SYN 쿠키를 활성화하려면 1로 설정합니다.
이 매개변수를 켠 후 서버는 클라이언트의 ack를 받은 후 클라이언트에 ack+syn을 보내기 전에 짧은 시간 내에 일련 번호로 응답하도록 클라이언트에 요청합니다.
클라이언트가 일련 번호 또는 제공된 일련 번호가 올바르지 않으면 클라이언트는 불법 클라이언트로 간주되므로 ack+syn이 클라이언트로 전송되지 않으며 재시도할 필요가 없습니다.

  • net.ipv4.tcp_max_syn_backlog

이 매개변수는 시스템이 허용할 수 있는 최대 반연결 TCP 연결 수를 정의합니다. 클라이언트는 서버에 syn 패킷을 전송하고 이를 기록합니다. 이 매개변수는 기록할 수 있는 최대 연결 수를 결정합니다. CentOS7에서는 기본값이 256입니다. Syn Flood 공격이 있을 때 이 값이 너무 작으면 서버가 쉽게 충돌합니다.
사실 서버는 너무 많은 리소스(CPU, 메모리 등)를 소비하지 않습니다. .) 이때 적당히 늘려주시면 됩니다. 예를 들어 30000으로 조정해 보세요.

  • net.ipv4.tcp_syn_retries

이 매개변수는 클라이언트에 적합합니다. 기본값은 6이며, 2로 변경하는 것이 좋습니다.

  • net.ipv4.tcp_synack_retries

이 매개변수는 서버에 적용 가능하며 syn+ack을 시작하기 위한 최대 재시도 횟수를 정의합니다. 기본값은 5입니다. 2로 변경하는 것이 좋습니다. syn Flood 공격을 적절하게 방지합니다.

  • net.ipv4.ip_local_port_range

이 매개변수는 포트 범위를 정의합니다. 시스템 기본 예약 포트는 1024 이하이며, 위 부분은 사용자 지정 포트입니다. 이 매개변수는 클라이언트에 적용됩니다.

클라이언트가 서버의 포트 80에 액세스하여 서버와 연결을 설정할 때 클라이언트는 무작위로 포트를 열고 서버와 연결을 시작합니다.
이 매개변수는 무작위 범위를 정의합니다. 포트. 기본값은 32768 61000이며, 1025 61000으로 조정하는 것을 권장합니다.

  • net.ipv4.tcp_fin_timeout

tcp 연결 상태 중 클라이언트 측의 상태는 FIN-WAIT-2 상태로, 상태가 timewait로 변경되기 전의 상태입니다.
이 매개변수는 어떤 프로세스에도 속하지 않는 연결 상태의 제한 시간을 정의합니다. 기본값은 60이며, 6으로 조정하는 것이 좋습니다.

  • net.ipv4.tcp_keepalive_time

tcp 연결 상태 중 하나가 확립된 상태입니다. 이 상태에서만 클라이언트와 서버가 통신할 수 있습니다. 정상적인 상황에서는 통신이 완료되면
클라이언트나 서버가 상대방에게 연결을 끊으라고 지시하고 클라이언트가 서버에 알리지 않으면
서버도 알리지 않고 상태가 timewait로 변경됩니다. 닫을 클라이언트(예: 클라이언트 측 연결이 끊어진 경우)를 결정하는 데 이 매개변수가 필요합니다.
예를 들어 클라이언트 연결이 끊겼지만 서버의 연결 상태는 여전히 유지됩니다. 클라이언트 연결 끊김 여부를 확인하려면 서버에서 가끔씩 감지 패킷을 보내 확인해야 합니다. 상대방이 온라인인가요? 이 시간은 이 매개변수에 의해 결정됩니다. 기본값은 7200초이며, 30초로 설정하는 것을 권장합니다.

  • net.ipv4.tcp_keepalive_intvl

이 매개변수는 위 매개변수와 동일합니다. 서버는 클라이언트가 온라인 상태인지 확인하기 위해 지정된 시간 내에 프로브를 시작합니다.

이때 서버는 상대방이 온라인 상태가 아닌지 판단할 수 없으며 여러 번 시도해야 합니다. 이 매개변수는 프로브를 다시 보내는 데 걸리는 시간, 즉 상대방의 문제를 처음 발견한 후 프로브를 다시 시작하는 데 걸리는 시간을 정의합니다.
기본값은 75초이며, 3초로 변경 가능합니다.

  • net.ipv4.tcp_keepalive_probes

10번째 및 11번째 매개변수는 감지를 시작할 시기와 감지 실패 후 소요되는 시간을 지정하지만 감지가 완료되는 횟수를 정의하지는 않습니다. .

이 매개변수는 감지를 시작할 패킷 수를 정의합니다. 기본값은 9이며, 2로 설정하는 것을 권장합니다.
설정 및 예
Linux에서 커널 매개변수를 조정하려면 /etc/sysctl.conf 구성 파일을 직접 편집한 다음 sysctl -p 명령을 실행하여 적용하면 됩니다.

위에서 분석한 각 커널 매개변수와 결합한 예는 다음과 같습니다

6
  net.ipv4.tcp_keepalive_time = 30
  net.ipv4.tcp_max_tw_buckets = 8000
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.tcp_syncookies = 1
  net.ipv4.tcp_max_syn_backlog = 30000
  net.ipv4.tcp_syn_retries = 2
  net.ipv4.tcp_synack_retries = 2
  net.ipv4.ip_local_port_range = 1025 61000
  net.ipv4.tcp_keepalive_intvl = 3
  net.ipv4.tcp_keepalive_probes = 2
로그인 후 복사

위 내용은 Linux 커널 매개변수를 최적화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿