Red Hat Training

A Red Hat training course is available for RHEL 8

34.8. 调优具有大量传入请求的应用程序

如果您运行一个处理大量传入请求的应用程序,如 Web 服务器,则有必要调整 Red Hat Enterprise Linux 来优化性能。

34.8.1. 调优 TCP 侦听积压日志,来处理大量 TCP 连接尝试

当应用程序打开 LISTEN 状态的 TCP 套接字时,内核会限制此套接字可以处理的接受的客户端连接的数量。如果客户端尝试建立比应用程序可以处理的连接更多的连接,则新的连接会丢失,或者内核向客户端发送 SYN cookie。

如果系统处于正常工作负载下,且来自合法客户端的连接导致内核发送 SYN cookie,请调优 Red Hat Enterprise Linux (RHEL)以避免它们。

先决条件

  • RHEL 在 Systemd 日志中记录 possible SYN flooding on port <ip_address>:<port_number> 错误消息。
  • 大量连接尝试来自有效源,不是攻击造成的。

流程

  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. 重新配置应用程序以使用新的侦听积压限制:

    • 如果应用程序为限制提供了一个配置选项,请更新它。例如,Apache HTTP 服务器提供了 ListenBacklog 配置选项,以便为该服务设置监听积压限制。
    • 如果无法配置限制,请重新编译应用程序。
  6. 重新启动应用程序。

验证

  1. 监控 Systemd 日志,来查看以后是否出现 possible SYN flooding on port <port_number> 错误消息。
  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),则侦听积压不够大,需要进一步调优。