8장. 많은 수의 들어오는 요청을 사용하여 애플리케이션 튜닝
웹 서버와 같이 들어오는 많은 요청을 처리하는 애플리케이션을 실행하는 경우 Red Hat Enterprise Linux를 조정하여 성능을 최적화해야 할 수 있습니다.
8.1. 많은 수의 TCP 연결 시도를 처리하기 위해 TCP 수신 백로그 조정 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션이 LISTEN 상태에서 TCP 소켓을 열면 커널은 이 소켓에서 처리할 수 있는 허용되는 클라이언트 연결 수를 제한합니다. 클라이언트가 처리할 수 있는 애플리케이션보다 더 많은 연결을 설정하려고 하면 새 연결이 삭제되거나 커널이 SYN 쿠키를 보냅니다.
정상적인 워크로드가 있고 합법적 클라이언트의 연결이 너무 많은 경우 커널이 SYN 쿠키를 전송하고 이를 방지하기 위해 RHEL(Red Hat Enterprise Linux)을 조정합니다.
사전 요구 사항
-
RHEL은 Systemd 저널의
포트 < ip_address > : <port_number> 오류 메시지에서 SYN 플러딩이 발생할수 있습니다. - 연결 시도가 많은 수는 유효한 소스에서 발생하며 공격으로 인한 것이 아닙니다.
프로세스
튜닝이 필요한지 확인하려면 영향을 받는 포트의 통계를 표시합니다.
# ss -ntl '( sport = :443 )' State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 650 500 192.0.2.1:443 0.0.0.0:*백로그(
Recv-Q)의 현재 연결 수가 소켓 백로그(전송-Q)보다 크면 수신 백로그가 여전히 충분히 크지 않고 튜닝이 필요합니다.선택 사항: 현재 TCP 수신 백로그 제한을 표시합니다.
# sysctl net.core.somaxconn net.core.somaxconn = 4096/etc/sysctl.d/10-socket-backlog-limit.conf파일을 생성하고 더 큰 수신 백로그 제한을 설정합니다.net.core.somaxconn = 8192애플리케이션은
net.core.somaxconn커널 매개변수에 지정된 것보다 더 큰 수신 백로그를 요청할 수 있지만 커널은 이 매개변수에 설정한 수로 애플리케이션을 제한합니다./etc/sysctl.d/10-socket-backlog-limit.conf파일에서 설정을 로드합니다.# sysctl -p /etc/sysctl.d/10-socket-backlog-limit.conf새 수신 백로그 제한을 사용하도록 애플리케이션을 재구성합니다.
-
애플리케이션에서 제한에 대한 구성 옵션을 제공하는 경우 업데이트합니다. 예를 들어 Apache HTTP Server는 이 서비스에 대한 수신 백로그 제한을 설정하는
ListenBacklog구성 옵션을 제공합니다. - 제한을 구성할 수 없는 경우 애플리케이션을 다시 컴파일합니다.
중요항상
net.core.somaxconn커널 설정과 애플리케이션의 설정을 모두 업데이트해야 합니다.-
애플리케이션에서 제한에 대한 구성 옵션을 제공하는 경우 업데이트합니다. 예를 들어 Apache HTTP Server는 이 서비스에 대한 수신 백로그 제한을 설정하는
- 애플리케이션을 다시 시작합니다.
검증
-
포트 <
port_number> 오류 메시지에서 SYN 플러딩 가능한추가 발생을 위해 Systemd 저널을 모니터링합니다. 백로그에서 현재 연결 수를 모니터링하고 소켓 백로그와 비교합니다.
# ss -ntl '( sport = :443 )' State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 500 192.0.2.1:443 0.0.0.0:*백로그(
Recv-Q)의 현재 연결 수가 소켓 백로그(전송-Q)보다 크면 수신 백로그가 충분히 크지 않고 추가 튜닝이 필요합니다.