记一次网关压测实践

在压测一个项目时,一开始并发用户数上不去。
大于两个并发用户数,就会有报错,报错如图:
在这里插入图片描述
看意思是请求的端口地址不能被使用。
一点点排查,用命令:
netstat -ano|grep 端口号(应用服务端口号)|wc -l,发现积压5万多,这证明,线程没有释放tcp链接。
使用vi /etc/sysctl.conf,
发现这个文件中并没设置tcp释放时间,所以tcp链接释放时间用的默认的5分钟,这5分钟内线程都不释放链接,导致后面的请求访问不通。
于是修改了释放时间,如图:
在这里插入图片描述
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 200
在/etc/sysctl.conf文件最后添加上图所示。
再次压测,发现并发用户数有所提高,但是并发用户数在20以上,就开始报错,报错如图:
在这里插入图片描述
继续排查,经开发提醒,
使用命令:cat /proc/sys/net/ipv4/ip_local_port_range 查看端口范围,还是使用默认的链接范围,继续修改,还是修改/etc/sysctl.conf这个文件,
在这里插入图片描述
加上:
net.ipv4.ip_local_port_range = 1024 65000,就是修改了端口范围
cat /etc/sysctl.conf

kernel.sysrq = 0 ------------------是否启用kernel.sysrq(在大多数服务已无法
响应的情况下,还能通过按键组合来完成一系列
预先定义的系统操作,1启用,0禁用;
kernel.core_uses_pid = 1 ------------------可以控制core文件的文件名中是否添加pid作为扩
展(文件内容为1,表示添加pid作为扩展名,生成
的core文件格式为core.xxxx;为0则表示生成的
core文件同一命名为core);
kernel.msgmnb = 65536 ------------------限制一个队列的最大长度;
kernel.msgmax = 65536 ------------------限制一条消息的最大长度;
kernel.shmmax = 68719476736 ------------------最大共享内存段大小;
kernel.shmall = 4294967296 ------------------可以使用的共享内存的总量;
kernel.shmmni = 4096 ------------------整个系统共享内存段的最大数目;
kernel.sem = 250 32000 100 128 --------------每个信号对象集的最大信号对象数;
系统范围内最大信号对象数;
每个信号对象支持的最大操数;
系统范围内最大信号对象集数;
kernel.msgmni = 256 ------------------决定了系统中同时运行的最大的消息队列的个数;
fs.file-max = 65536 ------------------系统级打开最大文件句柄的数量;

net.ipv4.ip_forward = 0 ------------------(0代表禁止进行IP转发;1代表可以进行IP转发);
net.ipv4.conf.default.rp_filter = 1 ------------控制系统是否开启对数据包源地址的校验;
net.ipv4.conf.default.accept_source_route = 0 --禁用icmp源路由选项;
net.ipv4.tcp_syncookies = 1 ------------------表示开启SYN Cookies。当出现SYN等待队列溢出
时,启用cookies来处理,可防范少量SYN攻击,
默认为0,表示关闭;
net.ipv4.conf.all.forwarding = 0 ---------------0代表不转发源路由帧,若做NAT建议开启;
net.ipv4.ip_local_port_range = 9000 65000 ------系统中的程序会选择这个范围内的端口来连接到目
的端口(目的端口当然是用户指定的;
net.ipv4.tcp_fin_timeout = 30 ------------------表示如果套接字由本端要求关闭,这个参数决定了
它保持在FIN-WAIT-2状态的时间,默认是60,降
低这个值以提高系统性能;
net.ipv4.tcp_max_syn_backlog = 8192 ------------定义backlog队列容纳的最大半连接数,如果配置
高可以设置的更高;
net.core.rmem_default = 262144 ------------套接字接收缓冲区大小的缺省值;
net.core.rmem_max = 4194304 ------------套接字接收缓冲区大小的最大值;
net.core.wmem_default = 262144 ------------套接字发送缓冲区大小的缺省值;
net.core.wmem_max = 262144 ------------套接字发送缓冲区大小的最大值;
修改完继续压测,效果还是不理想。
没办法了,继续排查,开发无意中提了一嘴,文件描述符,
于是使用命令:ulimit -n 查看linux系统的最大文件描述符,为1024,这个太小了,同时才能打开1024个文件,
如果想永久变更需要修改/etc/security/limits.conf 文件,如下:
vi /etc/security/limits.conf

* hard nofile 102400
* soft nofile 102400

于是修改成102400,再次压测,50个并发用户数,tps12000以上,响应时间3.5ms,搞定!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值