31.8. 많은 수의 수신 요청을 사용하여 애플리케이션 튜닝

웹 서버와 같이 들어오는 많은 요청을 처리하는 애플리케이션을 실행하는 경우 성능을 최적화하기 위해 Red Hat Enterprise Linux를 조정해야 할 수 있습니다.

31.8.1. 많은 TCP 연결 시도를 처리하기 위해 TCP 수신 백로그 튜닝

애플리케이션이 LISTEN 상태에서 TCP 소켓을 열 때 커널은 이 소켓이 처리할 수 있는 승인된 클라이언트 연결 수를 제한합니다. 클라이언트가 처리할 수 있는 것보다 더 많은 연결을 설정하려고 하면 새 연결이 손실되거나 커널이 클라이언트에 SYN 쿠키를 보냅니다.

시스템이 정상적인 워크로드 상태에 있고 적법한 클라이언트의 연결이 너무 많으면 커널에서 SYN 쿠키를 전송하도록 하려면 RHEL(Red Hat Enterprise Linux)을 조정하여 이를 방지합니다.

사전 요구 사항

  • RHEL 로그에서 SYN 플러싱 가능 포트 < ip_address > : <port_number > 오류 메시지의 Systemd 저널.
  • 연결 시도 횟수는 유효한 소스에서 생성되며 공격에 의한 것이 아닙니다.

절차

  1. 튜닝이 필요한지 여부를 확인하려면 영향을 받는 포트의 통계를 표시합니다.

    # 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)의 현재 연결 수가 소켓 백로그(Send-Q)보다 큰 경우 수신 백로그는 여전히 충분하지 않고 튜닝이 필요합니다.

  2. 선택 사항: 현재 TCP 수신 백로그 제한을 표시합니다.

    # sysctl net.core.somaxconn
    net.core.somaxconn = 4096
  3. /etc/sysctl.d/10-socket-backlog-limit.conf 파일을 만들고 더 큰 수신 백로그 제한을 설정합니다.

    net.core.somaxconn = 8192

    애플리케이션은 net.core.somaxconn 커널 매개변수에 지정된 것보다 큰 수신 백로그를 요청할 수 있지만 커널은 애플리케이션을 이 매개변수에 설정한 번호로 제한할 수 있습니다.

  4. /etc/sysctl.d/10-socket-backlog-limit.conf 파일에서 설정을 로드합니다.

    # sysctl -p /etc/sysctl.d/10-socket-backlog-limit.conf
  5. 새 listen backlog 제한을 사용하도록 애플리케이션을 재구성합니다.

    • 애플리케이션에서 제한에 대한 config 옵션을 제공하는 경우 이를 업데이트합니다. 예를 들어 Apache HTTP 서버는 이 서비스에 대한 listen backlog 제한을 설정하는 ListenBacklog 구성 옵션을 제공합니다.
    • 제한을 구성할 수 없는 경우 애플리케이션을 다시 컴파일합니다.
  6. 애플리케이션을 다시 시작합니다.

검증

  1. 포트 < port_number> 오류 메시지에서 가능한 SYN 플러딩이 발생할 수 있는지 Systemd 저널을 모니터링합니다.
  2. 백로그에서 현재 연결 수를 모니터링하고 소켓 백로그와 비교합니다.

    # 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)의 현재 연결 수가 소켓 백로그(Send-Q)보다 크면 수신 백로그가 충분히 크지 않고 추가 튜닝이 필요합니다.