[高性能网络编程] 所谓调优

文件句柄数限制###

两个事实:1)*nix系统中,一切都用文件来描述。2)操作系统会对单个进程打开的最大“文件”数量进行控制。
结论:你的模型再牛逼,因为这个限制,你也只能打开操作系统规定的那些个连接。

  • 单个进程的限制
    ulimit命令:ulimit -n 在linux返回1024,最多打开1024个文件,修改这个值用ulimit -SHn 来做。永久修改
    请加入到.bashrc中。
  • 操作系统范围内总数的限制
    /etc/sysctl.conf
    fs.file-max = 1000000
    net.ipv4.conntrack_max=1000000
    net.ipv4.netfilter.ip_conntrack_max = 1000000
    上述两个值待查阅资料更新

端口号限制###

容易混淆的点:accept返回的是文件描述符,而不是端口号,服务器来讲,你accept多少连接,你的客户都跟你bind的那一个端口进行通信,所以服务器能接受的最大连接数(不考虑参数限制),是客户端ip数 × 客户端端口数,也就是2^32 × 2^16 = 2^48,这是服务器理论上能接受的最大连接数,跟你本地支持多少个端口没有关系。

觉得很有道理的TCP调优###

  • 增大Tcp的初始拥塞窗口:有很多突发性(而且很有可能传输大量数据)的短连接,这是特别重要的一个优化,TCP还在慢启动,数据传输就结束了。

落地改法:网上介绍的好像只有改内核,并在内核中通过/proc文件系统控制这个值

  • 慢启动重启:连接空闲时,禁用慢启动重启,将会显著改善突发性传送数据的TCP长连接的性能。

$> sysctl -w net.ipv4.tcp_slow_start_after_idle=0

  • 启动窗口缩放将增大最大接收窗口大小。

$> sysctl -w net.ipv4.tcp_slow_start_after_idle=0

  • TCP快速打开:允许第一个TCP SYN分组发送应用数据,这需要服务器和客户共同支持。

https://en.wikipedia.org/wiki/TCP_Fast_Open

你可能感兴趣的:([高性能网络编程] 所谓调优)