Linux 网络性能调优

在大并发的服务器上, Linux 的网络部分内核参数有必要进行调优已得到最优化的性能.

比较关键的参数指标

  • /proc/sys/fs/file-max: 整个系统最大可以打开的文件描述符数量. 文件描述符打开的最大数量也决定了服务器的最大连接数.

  • /proc/sys/net/ipv4/tcp_max_syn_backlog: 指定TCP连接创建过程中, 已经完成第一次握手但是未完成第三次握手的队列长度. 意味着允许客户端和服务器端 同时 进行三次握手的队列长度. 这个就是 TCP 的 Syn 队列(待完成连接队列). 如果这个队列已经满了. 服务器就不能再接受请求了.

已经完成三次握手的连接会放入另外一个队列进进行维护, 也就是和 Syn队列对应的 Accept队列(已完成连接队列), 这个队列长度通常由 backlog 参数控制. 但是系统也参考 SOMAXCONN 值, 取他们2个的最小值为 Accept 队列长度.

  • /proc/sys/net/ipv4/tcp_syncookies: 如果为了扩大并发, 一味的把 tcp_max_syn_backlog 值调大, 容易受到 syn flood攻击. 新版的 Kernel 有些改变, 设置 tcp_syncookies = 1 后, 系统会默认tcp_max_syn_backlog 无限大.

  • /proc/sys/net/core/somaxconn: TCP Accept 队列的长度的默认参考值, 如果要支持大并发, 这个值要调高. 能同时完成握手和服务器建立连接的队列长度越大, 那么表示同时的并发值越大.

  • ulimit: Linux 通常默认的每个用户的最大进程数和文件数为1024. 大并发优化必调参数.


优化操作

  1. 修改系统 ulimit 限制:
    修改 /etc/security/limits.conf 文件, 添加下面几行:
# 最大文件打开数
* soft nofile 32768
* hard nofile 65535

重启生效

  1. 修改系统 SOMAXCONN + tcp_syncookies:
    修改 /etc/sysctl.conf 文件, 修改 net.ipv4.tcp_syncookiesnet.core.somaxconn 2个配置值.
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 262144

使用配置生效:

leo@Redis:/etc$ sudo sysctl -p
  1. 调高部署服务的 listen backlog 值.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容