Linux中的“backlog”主要涉及系统日志backlog(日志文件积压)和网络连接backlog(未完成连接队列)两类,两者的清理/优化方式差异较大,以下是具体设定方法:
系统日志(如/var/log/*.log)的积压是常见backlog问题,可通过logrotate工具(自动化日志管理)或定时任务(手动指定清理周期)实现定期清理。
logrotate是Linux自带的日志轮转工具,可自动完成日志的分割、压缩、删除,避免日志无限增长。
/etc/logrotate.conf,自定义配置需创建单独文件(如/etc/logrotate.d/myapp)。/var/log/myapp/*.log {
daily # 每天轮转一次(可根据需求改为weekly/monthly)
rotate 7 # 保留最近7个日志文件
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(避免立即压缩影响性能)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件时设置权限
}
该配置会每天轮转/var/log/myapp/目录下的日志,保留7天,并压缩旧日志。若需更灵活的清理策略(如按时间或大小删除),可通过cron定时执行清理命令:
journalctl --vacuum-time=3d(Systemd系统);journalctl --vacuum-size=500M;rm /var/log/*.log*。crontab -e),添加如下行(每天凌晨3点执行日志清理):0 3 * * * /usr/bin/journalctl --vacuum-time=3d
或使用find命令删除指定目录下N天前的文件(如删除/usr/local/backups目录下10天前的文件):find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \;
将上述命令保存为/root/scripts/clear_logs.sh,并赋予执行权限(chmod +x /root/scripts/clear_logs.sh),然后在crontab中添加定时任务。网络连接backlog(如TCP SYN队列、监听队列)的“清理”本质是优化队列大小和处理速度,避免因队列满导致连接被拒绝。需通过调整内核参数实现:
net.core.somaxconn:系统级最大监听队列长度(默认值通常较小,如128),增大该值可支持更多并发连接。sysctl -w net.core.somaxconn=4096 # 临时生效
echo "net.core.somaxconn = 4096" >> /etc/sysctl.conf # 永久生效
net.ipv4.tcp_max_syn_backlog:SYN队列(等待确认的连接请求)的最大长度,用于抵御SYN泛洪攻击。sysctl -w net.ipv4.tcp_max_syn_backlog=8192 # 临时生效
echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf # 永久生效
net.core.netdev_max_backlog:网络设备接收数据包的最大队列长度,增大该值可应对突发流量。sysctl -w net.core.netdev_max_backlog=10000 # 临时生效
echo "net.core.netdev_max_backlog = 10000" >> /etc/sysctl.conf # 永久生效
net.ipv4.tcp_fin_timeout:FIN-WAIT-2状态的超时时间(默认60秒),缩短该值可更快释放关闭的连接。sysctl -w net.ipv4.tcp_fin_timeout=30 # 临时生效
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf # 永久生效
net.ipv4.tcp_keepalive_time:TCP连接空闲多久后发送keepalive探测包(默认7200秒),降低该值可更快检测失效连接。sysctl -w net.ipv4.tcp_keepalive_time=600 # 临时生效(10分钟)
echo "net.ipv4.tcp_keepalive_time = 600" >> /etc/sysctl.conf # 永久生效
启用SYN Cookies可防止SYN泛洪攻击,避免因SYN队列满导致合法连接被拒绝:
sysctl -w net.ipv4.tcp_syncookies=1 # 临时生效
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf # 永久生效
除内核参数外,需调整应用程序的backlog设置(如Nginx、Tomcat),确保应用能处理更多并发连接:
server块中设置listen指令的backlog参数(默认511):server {
listen 80 default_server backlog 1024;
}
server.xml中设置acceptCount参数(默认100):<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
acceptCount="500" />
cp /var/log/syslog /var/log/syslog.bak),避免误删导致故障排查困难;sysctl -p命令使更改生效,并通过ss -lnt(查看监听队列)、netstat -s(查看连接统计)监控队列状态;backlog参数不应超过net.core.somaxconn的值),否则无法达到预期效果。