内核调优

内核调优

我正在调音sysctl.conf

根据优化指南在 linode 的网站上,以下是需要设置的合理值sysctl.conf

net.ipv4.tcp_max_syn_backlog = 3240000

但是,那相同值在 archlinux 优化指南中有这样一段话:

net.ipv4.tcp_max_syn_backlog = 65536

最后,在另一个优化博客(虽然很老了,但在 Google 上的 SEO 排名仍然很高),其价值被吹捧为:

net.ipv4.tcp_max_syn_backlog = 4096

所有这些球场都大不相同。将此值设置为高数字(而不是低数字)的原因是什么?哪一个应该是实际的“合理”值?

答案1

这主要取决于您服务器上的流量。有几个重要问题:

  • 您预计处理多少个并发连接?
  • 平均响应时间是多少?(如果生成响应需要 10-50 秒,即使没有 DDoS 攻击,您也很容易耗尽资源)。
  • 你使用哪台服务器?nginx,,haproxyvarnish

您应该监控:

netstat -s | grep "SYNs to LISTEN"

这是您的服务器丢失数据包的症状(例如因为积压队列已满)。

Netstat 统计信息被导出到/proc/net/netstat调用 stat 的地方ListenDrops。使用脚本解析可能更容易,或者使用类似以下内容:

cat /proc/net/netstat | awk '(f==0) { i=1; while ( i<=NF) {n[i] = $i; i++ }; f=1; next} \
    (f==1){ i=2; while ( i<=NF){ printf "%s = %d\n", n[i], $i; i++}; f=0}'

获取统计数据的可读名称。您应该能够使用以下方法收集这些数据:电讯报收集或者普罗米修斯

内核调优

net.ipv4.tcp_max_syn_backlog- 客户端尚未发送 ACK 响应的半开连接数可以保留在队列中(来源)

net.core.somaxconn可以排队等待接受的最大连接数

net.core.netdev_max_backlog接收队列中通过网络接口并等待内核处理的数据包的最大数量。

这些设置与打开的文件数紧密相关(因为在 Linux 中每个新连接将打开 2 个文件句柄)。您可以使用以下方法检查您的限制:

cat /proc/sys/fs/file-nr
8160    0       3270712

这意味着服务器已经8160打开了 之外的文件3270712

相关内容