
backlog 的值含义从来就没有被严格定义过。原先 Linux 实现中,backlog 参数定义了该套接字对应的未完成连接队列的最大长度 (pending connections)。如果一个连接到达时,该队列已满,客户端将会接收一个 ECONNREFUSED 的错误信息,如果支持重传,该请求可能会被忽略,之后会进行一次重传。
从 Linux 2.2 开始,backlog 的参数内核有了新的语义,它现在定义的是已完成连接队列的最大长度,表示的是已建立的连接(established connection),正在等待被接收(accept 调用返回),而不是原先的未完成队列的最大长度。现在,未完成队列的最大长度值可以通过 /proc/sys/net/ipv4/tcp_max_syn_backlog 完成修改,默认值为 128。
至于已完成连接队列,如果声明的 backlog 参数比 /proc/sys/net/core/somaxconn 的参数要大,那么就会使用我们声明的那个值。实际上,这个默认的值为 128。注意在 Linux 2.4.25 之前,这个值是不可以修改的一个固定值,大小也是 128。
设计良好的程序,在 128 固定值的情况下也是可以支持成千上万的并发连接的,这取决于 I/O 分发的效率,以及多线程程序的设计。在后面的性能篇里,我们的目标就是设计这样的程序。
https://time.geekbang.org/column/article/135735
一个-是简写 一般带一个字母,两个-是全程 一般带完整单词,其他没什么差别。 *** 作方法如下:
1、首先linux系统的内核参数涉及到的配置文件和命令分别是: /etc/sysctl.conf文件。syctl命令文件和命令的路径,分别如下面图中所示。
2、先来看内核参数的查看,使用的是sysctl 这个命令。使用的比较多的选项有5个。
3、再来看-N和-n这两个参数,在讲解nginx的书籍上说,和它相关的两个内核参数是:net.core.netdev_max_backlog。net.core.somaxconn。
4、再次尝试设置第二个参数net.core.somaxconn,这次将设置的值改小一点,设置成功。
5、要想设置一直生效,就要用到/etc/sysctl.conf这个配置文件,直接将对应的设置写入到这个配置文件中,然后重新加载这个配置文件即可。这样配置就能一直生效。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)