linux高并发配置分析

Author:Skate

Time:2018/08/09

先扔两个小问题

  • port和socket的区别
  • 单机系统的最大并发多大?和65535有什么关系?

 

在回答上面问题前,先简单理解一个服务请求完整过程

 

1.服务启动时创建监听scoket

2.创建的监听socket与对外服务的端口绑定

3.服务开始监听

4.客户端开始连接服务器对应的port

5.服务端接受客户端的请求并产生新的socket,基于这个新的socket与客户端交换数据

 

从以上流程来看,“端口号”这个重要的东东,我们只用了一次,就是执行bind的时候!而以后创建的socket,说白了就是一个可以进行网络IO操作的HANDLE而已,

它跟端口号的牵扯仅限bind以及作为客户端连接服务器的识别端口号的时候,一旦服务产生了新socket,这个端口号,对服务器和新客户端的通信而言就不再有任何意义

 

我们知道一个socket是可以进行网络IO操作的HANDLE(linux系统任何设备都用多文件来表示的),服务器可承载的连接数最大量,不就是能产生多少个客户端的socket吗。

1.linux系统创建一个socket多大呢?

1.1.TCP发送缓冲区,单位为字节(最小、默认、最大)

/proc/sys/net/ipv4/tcp_wmem

# cat /proc/sys/net/ipv4/tcp_wmem

4096    16384   4194304

1.2.TCP读取缓冲区,单位为字节(最小、默认、最大)

/proc/sys/net/ipv4/tcp_rmem

# cat /proc/sys/net/ipv4/tcp_rmem

4096    87380   4194304

2.linux供TCP使用内存大小

调整TCP的内存大小,其单位是页,1页等于4096字节

/proc/sys/net/ipv4/tcp_mem(最小、默认、最大)

# cat /proc/sys/net/ipv4/tcp_mem

12383040        16510720        24766080

 

tcp_mem三个变量说明:

low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。

pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。

high:允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出“TCP: too many of orphaned sockets”。

3.linux系统任何设备都用文件来表示的,那创建socket的总数还受linux的句柄数控制

fs.file_nr ---单进程句柄数控制

fs.file_max ---系统级别句柄数控制

 

总结下,要增大linux系统的并发,取决如下:

1.需要根据自己的业务减少每个socket的大小(tcp_wmem,tcp_rmem),

2.增加rcp使用总内存(tcp_rmem),

3.增加系统句柄数量(fs.file_max,fs.file_nr)

4.tcp其他参数优化(tcp_tw_reuse、tcp_tw_recycle、tcp_keepalive_time、tcp_fin_timeout、.tcp_max_tw_buckets、net.core.somaxconn、tcp_max_syn_backlog)

5.硬件给力(cpu核越多越好,网卡要快)

 

最后再回答前面的问题

1.port和socket的区别

port:是一个有16bit表示的,可允许有 65536 ( 2的16次方) 个不同的端口号,范围在 0 ~ 65535 之间

socket:socket可以理解为服务的寻址方式,用于定位服务的

 

2.单机系统的最大并发多大?和65535有什么关系?

理论linux系统的最大并发取决与硬件极限,而我们日常有时会误解最大并发数65535,是因为受限句柄限制导致的

 

参考:

https://www.cnblogs.com/276815076/p/6992352.html
http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html

 

 

猜你喜欢

转载自blog.csdn.net/wyzxg/article/details/81538374