고성능 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
net.ipv4.tcp_synack_retries
net.ipv4.ip_local_port_range
클라이언트가 서버의 포트 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
이 매개변수는 감지를 시작할 패킷 수를 정의합니다. 기본값은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!