33.8. 使用大量传入请求调整应用程序
如果您运行一个处理大量传入请求的应用程序,如 Web 服务器,则可能需要调整 Red Hat Enterprise Linux 以优化性能。
33.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>错误信息。
- 大量连接尝试来自有效源,不是由攻击造成的。
流程
- 要验证是否需要调整,请显示受影响的端口的统计信息: - ss -ntl '( sport = :443 )' - # 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:*- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果积压 ( - Recv-Q)中的当前连接数大于套接字积压(- Send-Q),则侦听积压仍然不够大,需要调优。
- 可选:显示当前 TCP 侦听积压限制: - sysctl net.core.somaxconn - # sysctl net.core.somaxconn net.core.somaxconn = 4096- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 - /etc/sysctl.d/10-socket-backlog-limit.conf文件,并设置更大的侦听积压限制:- net.core.somaxconn = 8192 - net.core.somaxconn = 8192- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 请注意,应用程序可以请求比 - net.core.somaxconn内核参数中指定的更大的侦听积压,但内核会将应用程序限制为您在此参数中设置的数值。
- 从 - /etc/sysctl.d/10-socket-backlog-limit.conf文件载入设置:- sysctl -p /etc/sysctl.d/10-socket-backlog-limit.conf - # sysctl -p /etc/sysctl.d/10-socket-backlog-limit.conf- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重新配置应用程序,以使用新的侦听积压限制: - 
									如果应用程序为限制提供了配置选项,请更新它。例如,Apache HTTP 服务器提供了 ListenBacklog配置选项,来为该服务设置侦听积压限制。
- 如果无法配置限制,请重新编译应用程序。
 重要- 您必须始终更新 - net.core.somaxconn内核设置和应用程序的设置。
- 
									如果应用程序为限制提供了配置选项,请更新它。例如,Apache HTTP 服务器提供了 
- 重新启动应用程序。
验证
- 
							监控 Systemd 日志,以确认以后是否有possible SYN flooding on port <port_number>错误消息出现。
- 监控积压中当前连接的数量,并将其与套接字积压进行比较: - ss -ntl '( sport = :443 )' - # 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:*- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果当前积压 ( - Recv-Q)中的连接数大于套接字积压(- Send-Q),则侦听积压不够大,需要进一步调优。