本文大纲
《如何做性能测试》
压力端(客户端)的准备
一. 压力端修改可用端口范围
最近压测的时候发现程序后台不报错的情况下,压测的错误率很高,实际就是本地的端口不够用和最大端口号使用受限制造成的。
这一步不是必须要做的,请根据你的实际情况决写。
由于我做性能测试时, 客户端(压力端)大多时候使用Windows服务器,所以下面的示例是为Windows准备的。
1、 修改可用端口范围 (临时)
查看默认可用端口的数量
D:>netsh interface ipv4 show dynamicportrange protocol=tcp
Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 49152
Number of Ports : 16384
这个能用的端口实际就16384个,可以直接 netstat -atn查看一下每个状态的数量。如果对外做大量的请求会造成本地端口不够用。
可以修改一下起始端口 ( 临时起作用,重启后失效)
netsh int ipv4 set dynamicport tcp start=2000 num=63000 (这是重点)
netsh int ipv4 set dynamicport udp start=2000 num=63000
netsh int ipv6 set dynamicport tcp start=2000 num=63000
netsh int ipv6 set dynamicport udp start=2000 num=63000
2、修改可用端口范围(永久)
- 打开注册表
- 定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- 编辑新建 DWORD (32-位)值 ,输入名称 MaxUserPort
- 选择“修改”。选择十进制值为“65534 ”,并“确定”。 (在此处输入介于5000和65534之间的十进制值)
- 关闭注册表编辑器。
需要特别注意,修改完成后,需要重启主机生效。
二. 压力端修改TIME_WAIT状态的TCP连接回收时间(永久)
在进行Web应用性能测试时,经常会遇到网络连接相关的异常情况。例如,在使用JMeter对Tomcat中的Web应用(通过HTTP协议)进行压测时,常常会发现系统每隔2分钟卡住10秒左右,然后又恢复正常。经过深入分析和排查后,我们发现JMeter客户端产生了大约1.6万个TIME_WAIT状态的连接等待回收,导致网络连接被堵塞,无法建立新的连接。
解决方案:可以通过调整操作系统的TCP参数来加速TIME_WAIT状态的回收。 这一步不是必须要做的,请根据你的实际情况决写。
由于我做性能测试时, 客户端(压力端)大多时候使用Windows服务器,所以下面的示例是为Windows准备的。
- 在Windows开始菜单中,单击“运行”。
- 在“运行”对话框中,输入“regedit”后按“Enter”打开注册表编辑器。
- 在“注册表编辑器”中打开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters”路径。
- 在“编辑”菜单中,选择“新建 > DWORD (32-位)值”,输入名称“TcpTimedWaitDelay”。
- 右键单击TcpTimedWaitDelay,选择“修改”。
- 在“编辑 DWORD(32位)值”对话框的“基数”区域中,选择十进制值为“30”,并“确定”。 (意思是30秒回改)(请在此处输入介于30和300之间的十进制值)
- 关闭注册表编辑器。
TIME_WAIT的典型持续时间为1-4分钟。(60秒-240秒)
- Linux默认的TIME_WAIT时长一般是60秒 = 2MSL
- windows 默认是240秒