Apache JMeter对启用SSL的应用程序执行性能和/或负载测试时,SSL套接字错误多是常常遇到的麻烦,严重阻碍了您的测试工做。本文重点介绍如何经过相应地配置和调优JMeter来克服这些与链接相关的错误。css
在Jmeter中指示SSL套接字问题的错误消息示例包括:前端
Non HTTP response code: java.net.SocketException Non HTTP response message: Connection reset
Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: connect timed out
Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: Read timed out
java
强烈建议使用最新版本,以利用新的改进和组件。算法
避免在最后一个版本以前使用早于3个版本的版本。apache
将如下内容添加到jmeter.properties以启用JMeter Logger面板:后端
jmeter.loggerpanel.display=true
浏览器
要经过JMeter菜单将日志级别增长到DEBUG:缓存
Options -> Log Level -> DEBUG
服务器
要经过log4j2.xml启用上下文和线路日志记录的调试模式:网络
<Logger name="org.apache.http" level="debug" />
JMeter中的默认链接超时是开箱即用的20秒。为帮助诊断和解决套接字链接问题,增长此值一般颇有帮助。为此,请在JMeter测试计划中为HTTP Request对象指定更高的链接超时。例如,设置为60000(毫秒)以将总超时增长到60秒。
从“配置元素”选项中添加“HTTP请求默认”配置元素(即,右键单击测试计划并添加此“HTTP请求默认值”)。
在“HTTP请求默认值”中,有一个选项 - 链接'超时(毫秒)'在此字段中指定您的链接超时值,它将应用于全部子采样器。若是在测试计划级别添加了“HTTP请求默认值”,则它将应用于全部采样器和全部线程组。
要指定单独的链接超时,请在每一个采样器的相同字段中指定。单个采样器链接超时将覆盖“HTTP请求默认”链接超时值。
JMeter能够选择延迟线程建立,直到线程开始采样(即,在任何线程组延迟和线程自己的加速时间以后)。这容许很是大的线程总数,前提是不会有太多并发的线程。
JMeter使用更多资源来模拟浏览器并行获取嵌入资源,如css,gif,js和静态内容。若是有许多用户,则可能会建立太多线程,而且因为JMeter端的带宽争用而开始对响应时间产生负面影响。若是要模拟许多用户,建议禁用并行下载,由于JMeter不会模拟浏览器的缓存,浏览器也不会在后续请求中从新下载嵌入式资源。
若是您的应用程序服务器层上有内部签名或自签名证书,则须要将JMeter配置为将这些证书识别为有效。要解决此问题,请修改system.properties并使用相关的签名者证书配置信任库。
# Truststore properties (trusted certificates)
javax.net.ssl.trustStore=C:/trust.jks
javax.net.ssl.trustStorePassword=sample
若是您的应用程序须要SSL客户端证书身份验证或受权,则须要建立密钥库并在指向该密钥库的system.properties文件中设置如下属性:
# Keystore properties (client certificates)
javax.net.ssl.keyStore=C:/key.jks
javax.net.ssl.keyStorePassword=sample
在jmeter.properties中设置下面的属性,以调整JMeter处理SSL会话,协议和密码的方式:
要启用SSL会话共享:
https.sessioncontext.shared=true
设置默认HTTPS协议级别:
https.default.protocol=TLSv1.2
要启用多个HTTPS协议:
https.socket.protocols=TLSv1 TLSv1.2
要启用多个密码:
https.cipherSuites=TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256
要在测试期间保留SSL上下文:
https.use.cached.ssl.context=true
在http 4上设置重试次数
httpclient4.retrycount=1
为避免HTTP链接池出现问题,可能须要在JMeter中启用陈旧链接检查。在JMeter测试运行期间接收“Socket Closed”异常时,应使用此步骤。要启用过期链接检查,请在user.properties中设置如下属性:
http.connection.stalecheck$Boolean=true
Keep-Alive是HTTP协议的一个很是重要的特性。它容许客户端经过单个TCP链接发出多个HTTP请求。这提供了很大的性能提高,由于不然创建许多TCP链接将产生大量没必要要的网络开销。
若是负载测试遇到负载均衡器前端的应用程序,请确保负载均衡器配置了足够的最大链接限制以处理预期负载。一样,验证负载平衡算法不会将过多的流量偏向一个或多个应用程序服务器实例,而且该负载充分分散在应用程序服务器后端之间。