
当高并发压垮服务的时候,瓶颈往往不在应用层,而在系统层。默认参数是针对一般情况设计的,在连接数增多之后每一项都会受到限制。
相关的参数最先得到好处。全连接队列和半连接队列的上限决定了突发流量下的丢包情况,队列溢出计数器不断增加就是直接的证据;开启复用、降低回收时间可以减少TIME_WAIT对端口的占用;本地端口范围放宽之后,出向连接密集的网关类服务就不会再出现端口耗尽的情况了。
文件描述符就是第二道关卡。单进程的上限和系统的总容量都要一起调整,否则只修改其中一项的话是无效的;应用自己的连接配置和系统值进行比较,如果两者不一致的话,那么连接就会随机失败。
根据场景来取舍内存和网络栈。脏页回写比例会影响写入型业务的抖动情况,交换倾向调低可以防止关键进程被换出;接收和发送缓冲区上限放开之后,大流量下载场景下的吞吐性能得到了很大的提升。把每一项修改都写入配置文件里,一次只改一类,压测对比前后的曲线。
调优不是越激进越好。队列和缓冲区中每一项取值都会占用一定的内存空间,超过承载能力之后就会造成故障。保留一份基准数据,参数、并发量一起进行复核。