nginx服务器调优

为了满足并发要求,本次对某个接口进行压测,目标是并发1200(实际可以达到1600),RT 1s以内;nginx+tomcat集群

1、刚开始启动200线程,30秒,没有任何问题,响应时间也正常;

2、将持续时间调整到300秒后,运行到一定时间就会报错,并且后续请求都是错误;

3、通过查看error日志发现:

      onnect() to xxxx:8080 failed (99: Cannot assign requested address) while connecting to upstream, client: xxxxx, server: localhost, request: "POST /xxxx/UpdateDevicePosition.do HTTP/1.1", upstream: "http://xxxxxx:8080/xxxxx/UpdateDevicePosition.do", host: "xxxxx"

此报错说明nginx在反向代理到tomcat时,端口已经耗尽,不能再分配端口。

4、解决方案:

    首先将端口范围扩大,

   查看端口范围:

sysctl net.ipv4.ip_local_port_range

扩大端口范围:

echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range

(但是治标不治本,因为端口最多只有65535个);

    再通过 netstat -anp查看网络连接,发现有很多连接处于TIME_WAIT,于是只需将处于TIME_WAIT的连接快速回收即可解决问题;所以通过改写内核参数解决:

sysctl -w net.ipv4.tcp_timestamps=1 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
sysctl -w net.ipv4.tcp_tw_recycle=1 表示开启TCP连接中TIME-WAIT sockets的快速回收

引申扩展关于解决time_wait的处理办法

具体的解决方式

 

vim /etc/sysctl.conf

net.ipv4.tcp_syncookies = 1

// 表示开启SYN cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭

net.ipv4.tcp_tw_reuse = 1

//表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1

//表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

net.ipv4.tcp_fin_timeout = 30

//修改系統默认的 TIMEOUT 时间

/sbin/sysctl -p   //保存后生效
 

至此问题解决,压测时服务器稳定运行,先留个记录,下一篇如何将并发只有70优化到1600;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值