性能测试之网络测试
一、网络知识
-
1、网络–接收方限制-网络连接配置
sysctl:sysctl用于运行时配置内核参数,这些参数位于/proc/sys目录下。 -
linux系统启动,依次读取
/etc/sysctl.d/*.conf
/run/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
-
sysctl --help
查看帮助 -
2、我们通常说的网络,都是在tcp/ip协议族的基础上运作的,http协议,只是这个协议族中的一个
- tcp协议:通过数据发送者和接收者相互回应对方发来的确认信息,可靠的进行数据传输
- ip协议:指定数据发送的ip信息,以及通过路由器转发数据
-
3、三次握手和四次挥手
- tcp三次握手
- 初次见面,握手(你好,你好,你好),确保数据100%准确到达
- tcp组成:源地址、源端口、目的地址、目的端口
- 源地址:发起方的地址(ip)
- 肯定唯一,但可能不固定
- 源端口:发起通信的端口
- 每一次通信,都要占用1个端口
- 目的地址:接收方(服务)的地址(ip)
- 目的端口:接收方(服务)的端口
- 端口:
- 电脑最多 65535个端口
- 1- 1023:公认端口,绑定在一些特定的服务器上,不能被使用,比如常见的 21、22、25、80、443
- 1024-49151:注册端口,松散的绑定在一些服务上,比如8080、9800、3000
- 49152~65535: 动态私有端口,约16800个
- 一台电脑,一般能用于tcp通信的端口,大约是16400个
- tcp源端口
- 每一次通信,都会占用一个端口
- 端口开启:发送方分配一个端口,数据从端口出去,进入网络
- 端口关闭:端口开启的时间到了,关闭端口
- 对于普通使用,完全没有问题
- 但是性能测试,就可以会有问题
- 性能测试,在发起方1台机器上,短时间发起大量请求,占用大量端口,导致端口不够用
- 问题:address already in use:connect
- 优化方向:
- 扩大端口范围: 1024 ~ 65535 达到6.4w端口
- 让端口占用的时长缩短: 去掉keepalive
- 定位问题:
- 1、查看报错,根据接口返回进行分析
- windows(大多数情况,性能测试发起方系统为windows)
netstat -ano | find "TCP" /i /c
/i
:搜索时不区分大小写/c
:统计搜索结果- 如果你发起方机器,这个命令的数值,约1.4w,可以肯定,你本地端口成为性能瓶颈
- linux/mac
netstat -ano | grep "TCP" | wc -l
ss -s
- 1、查看报错,根据接口返回进行分析
- 但是性能测试,就可以会有问题
- 每一次通信,都会占用一个端口
- 源地址:发起方的地址(ip)
-
二、判断带宽是否有问题
三、网络调优实战:当接口报地址被占用/连接超时
- tcp三次握手
-
2、在windows和linux解决源端口的问题
-
1)windows:修改2个注册表
-
1、注册表:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\Tcpic\Parameters]
:修改里面的MaxUserPort:- 如有这个值,则设置为十进制的65534
- 没有这个值,则新增DWORD,name为MaxUserPort,value为65534
- 重启系统
-
2、注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Sevices\Tcpio\Parameters
: 修改里面的TcptimedWaitDelay- 如有,设置一个十进制是事件,单位秒(默认240s)
- 没有,则新增DWORD,name为TcpTimedWaitDelay,value为十进制的时间30
- 重启系统
-
-
原因2:服务器要调优
-
解决方案:
参数 | 含义 | 用法 |
---|---|---|
-c | core文件上限 | 设定core文件的最大值,单位:块 |
-d | 数据块大小 | 程序数据块最大值:单位:KB |
-e | 调度优先级 | 最高的优先级 |
-f | 文件大小 | 文件最大大小,单位:块 |
-i | 待处理的信号 | 最大待处理信号 |
-l | 最大内存锁 | 内存锁最大值,单位:KB |
-m | 最大内存大小 | 可使用的内存最大值,单位:KB |
-n | 打开文件数量 | 同一时间最多可开启的文件数量 |
-p | 缓冲区大小 | 指定管道缓冲区的大小,单位:512字节 |
-q | POSIX消息队列 | 队列最大长度,单位:字节 |
-r | 时间优先级 | 时间最高优先级 |
-s | 栈大小 | 栈的最大值,单位:KB |
-t | CPU时间 | 进程使用CPU的时间上限 |
-u | 程序数量 | 用户最多可开启的进程+线程数目 |
-v | 虚拟内存 | 可以使用的虚拟内存上限,单位:KB |
-x | 文件锁 | 最多文件数量 |
-
3、永久修改vim /etc/security/limits.conf
-
使用演示(配置完了记得保存重启)
-
上面的值具体是什么含义呢,来看下面吧:
- 配置范围配置:
*
代表所有用户%
代表所有用户组
- 是否强制配置:
soft
:非强制限制hard
:强制限制
- 具体选项配置:
- 我们一般最关注nofile(同一时间最多可开启的文件数量)
- nproc (用户最多可开启的进程+线程数目)
- 配置范围配置:
-
应用连接池:
-
接收方(目的地)限制:
-
查看某个进程允许打开的最大文件数
-
cat /proc/PID/limits
-
ps: 不管你是用 ulimit命令修改,还是 修改文件limits.conf, 你的应用程序要使用这个配置,那么你的应用程序需要重启
-
cat /proc/sys/fs/file-max 查看系统允许打开的最大数量
-
-
检查系统配置是否成为瓶颈:查看某个进程当前已经打开的文件总数
lsof -p PID | wc -l
查看具体某个进程打开的文件数lsof | wc -l
查看当前系统打开的总文件数量- 我们操作的时候可以先查看某个进程允许打开的最大文件数(
cat /proc/PID/limits
),然后再查看具体某个进程打开的文件数(lsof -p PID | wc -l
),然后再进行修改(vim /etc/security/limits.conf
)
- 我们操作的时候可以先查看某个进程允许打开的最大文件数(
- 禁ping
-
# 禁ping
sysctl -w net.ipv4.icmp_echo_ignore_all=1 修改
sysctl -w net.ipv4.route.flush=1 刷新
sysctl -p 生效
# 开启
sysctl -w net.ipv4.icmp_echo_ignore_all=0
sysctl -w net.ipv4.route.flush=1
sysctl -p