我认为针对 Linux 网络调优提出一个核心问题是一个好主意。我对以下调优选项特别感兴趣。
- 网络服务器
- Varnish/Squid 服务器
- 数据库服务器
- 文件服务器
- 应用服务器
答案1
此时,在内核中进行“调整”通常不值得。除非您有测试设备(或集群的 A/B 选项已打开),并且非常好的文档仅就系统管理开销而言是不值得的。
如今,Linux 内核对 TCP 有很好的自动调整功能,你能做得更好,但这些并不是默认的,因为它们在互联网上被视为“贪婪”并且不公平。
我最接近的调整是:
- 使用 ext3 或 xfs 挂载 noatime(隐含 nodiratime)
- 仅运行所需的服务
- 对于 squid 和 mysql 等服务,允许它们使用更多 RAM
除极少数例外,上述三点可以帮你达到 90% 的目标。
答案2
我把网络堆栈调整放在连接数百个用户的路由器/防火墙上
net/ipv4/route/max_size=262144
net/ipv4/netfilter/ip_conntrack_tcp_timeout_established=18000
net/ipv4/neigh/default/gc_thresh1=1024
net/ipv4/neigh/default/gc_thresh2=2048
net/ipv4/neigh/default/gc_thresh3=4096
net/netfilter/nf_conntrack_max=128000
net/netfilter/nf_conntrack_expect_max=4096
[ 多年来根据一些不愉快的崩溃情况进行了经验性调整 ]
对于文件/sql/poroxy 服务器,你肯定想要使用数据/spool 安装分区noatime,nodira时间对于 reiserfs - notail ] 可以避免每次访问文件进行读取时造成额外的磁盘浪费。
并且你确实想要[也许你还不知道;-]收集统计数据 - 例如穆宁- 进行一些容量规划,看看您的调整是否确实降低了系统负载。
答案3
你可能想看看web100. 它是一个内核补丁,同时也是一个用户空间,旨在针对高性能网络优化 Linux 内核。
Web100 项目的目标是创建一个完整的主机软件环境,无论网络容量如何,该环境都可以以 100% 的可用带宽运行常见的 Web 应用程序。
另请查看高性能 SSH/SCP。
SCP 和 OpenSSH 中底层的 SSH2 协议实现的网络性能受到静态定义的内部流量控制缓冲区的限制。这些缓冲区通常最终成为 SCP 网络吞吐量的瓶颈,尤其是在长距离和高带宽网络链路上。修改 ssh 代码以允许在运行时定义缓冲区可以消除此瓶颈。