java.net.SocketException: Socket closed
【问题原因】
在JMeter下,发送http 请求时,一般都是默认选择了use keepAlive,如下:
但其配置JMeter.properties中的时间设置默认却是注销的,也是是说,不会等待,一旦连接空闲,则立马断开了,导致我们压测中出现了事务失败的情形。
【解决方法】
修改httpclient4.idletimeout=<time in ms> 设置成自己觉得合理的时间,一般可设置成10-60s(表示连接空闲10s后才会断开),注意这边单位是ms。修改完成后再次压测,错误不再有了。
【补充】
Jmeter中Stop和Shutdown的区别:
- Stop : 它会直接的把接下来进行的所有线程直接停掉(不推荐) ;
- Shutdown: 在当前线程运行结束后,才会去把剩下的还没有执行的线程全部结束掉(推荐) ;
java.lang.OutofMemoryError
【问题原因】
JVM堆内存配置的太小,在压测过程中持续增加线程数时导致内存溢出错误;
【解决方法】
找到JMeter bin目录下的jmeter.bat文件,notepad等文本工具打开,找到如下内容:
注意,Jmeter不同版本之间,配置文件的内容可能有所偏差,但是HEAP是一定有的;
说明:
-Xms512m:初始化堆内存大小 -Xmx512m:最大堆内存大小,这里的内存大小建议为512的整数倍,可以根据机器实际内存进行合理的设置,建议最大值-Xmx不要超过剩余物理内存的50%
通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源set NEW=-XX:NewSize=640m -XX:MaxNewSize=640m
1)-XX:newSize:新生代初始内存的大小,应该小于 -Xms的值
2) -XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值,因为新生代占内存来自整个堆内存。为了优化GC(内存垃圾回收),最好设置-XX:MaxnewSize值约等于-Xmx的1/3;
注意:jvm在执行GC时,会停止工作。MaxnewSize的增大,可以降低GC频率。
Java.net.BindException: Address already in use: connect
【问题原因】
Windows 提供给 TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。
【解决方法】
- 打开注册表 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters ;
- 新建DWORD值,name:TcpTimedWaitDelay, value:30(十进制)设置为30秒;
-
新建DWORD值,name:MaxUserPort, value:65534(十进制)最大连接数65534;
- 重启压测机器
【To be continued...】