JMeter中的HTTPS套接字错误
Apache JMeter对启用SSL的应用程序执行性能和/或负载测试时,SSL套接字错误可能是经常遇到的麻烦,严重阻碍了您的测试工作。本文重点介绍如何通过相应地配置和调优JMeter来克服这些与连接相关的错误。
在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
建议#1:使用最新版本的JMeter
强烈建议使用最新版本,以利用新的改进和组件。
避免在最后一个版本之前使用早于3个版本的版本。
建议#2:在JMeter中启用DEBUG模式
将以下内容添加到jmeter.properties以启用JMeter Logger面板:
jmeter.loggerpanel.display=true
要通过JMeter菜单将日志级别增加到DEBUG:
Options -> Log Level -> DEBUG
要通过log4j2.xml启用上下文和线路日志记录的调试模式:
<Logger name="org.apache.http" level="debug" />
建议#3:设置连接超时
JMeter中的默认连接超时是开箱即用的20秒。为帮助诊断和解决套接字连接问题,增加此值通常很有帮助。为此,请在JMeter测试计划中为HTTP Request对象指定更高的连接超时。例如,设置为60000(毫秒)以将总超时增加到60秒。
从“配置元素”选项中添加“HTTP请求默认”配置元素(即,右键单击测试计划并添加此“HTTP请求默认值”)。
在“HTTP请求默认值”中,有一个选项 - 连接'超时(毫秒)'在此字段中指定您的连接超时值,它将应用于所有子采样器。如果在测试计划级别添加了“HTTP请求默认值”,则它将应用于所有采样器和所有线程组。
要指定单独的连接超时,请在每个采样器的相同字段中指定。单个采样器连接超时将覆盖“HTTP请求默认”连接超时值。
建议#4:延迟线程创建
JMeter可以选择延迟线程创建,直到线程开始采样(即,在任何线程组延迟和线程本身的加速时间之后)。这允许非常大的线程总数,前提是不会有太多并发的线程。
建议5:禁用并行下载
JMeter使用更多资源来模拟浏览器并行获取嵌入资源,如css,gif,js和静态内容。如果有许多用户,则可能会创建太多线程,并且由于JMeter端的带宽争用而开始对响应时间产生负面影响。如果要模拟许多用户,建议禁用并行下载,因为JMeter不会模拟浏览器的缓存,浏览器也不会在后续请求中重新下载嵌入式资源。
建议#6:配置受信任和客户端SSL证书
如果您的应用程序服务器层上有内部签名或自签名证书,则需要将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
建议7:调整JMeter SSL配置
在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
建议#8:启用陈旧连接检查
为避免HTTP连接池出现问题,可能需要在JMeter中启用陈旧连接检查。在JMeter测试运行期间接收“Socket Closed”异常时,应使用此步骤。要启用过时连接检查,请在user.properties中设置以下属性:
http.connection.stalecheck$Boolean=true
建议#9:在Web服务器上启用HTTP Keep-Alive
Keep-Alive是HTTP协议的一个非常重要的特性。它允许客户端通过单个TCP连接发出多个HTTP请求。这提供了很大的性能提升,因为否则建立许多TCP连接将产生大量不必要的网络开销。
建议#10:检查负载均衡器配置
如果负载测试遇到负载均衡器前端的应用程序,请确保负载均衡器配置了足够的最大连接限制以处理预期负载。同样,验证负载平衡算法不会将过多的流量偏向一个或多个应用程序服务器实例,并且该负载充分分散在应用程序服务器后端之间。
JMeter中的HTTPS套接字错误的更多相关文章
- Python网络编程——处理套接字错误
在网络应用中,经常会遇到这种情况:一方尝试连接,但另一方由于网络媒介失效或者其他原因无法响应. Python的Socket库提供了一个方法,能通过socket.error异常优雅地处理套接字错误. 1 ...
- Python中利用原始套接字进行网络编程的示例
Python中利用原始套接字进行网络编程的示例 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构 ...
- Go中链路层套接字的实践
1. 介绍 2. 服务端 3. 协议头部 4. 客户端 5. 总结 1. 介绍 接上次的博客,按照约定的划分,还有一层链路层socket.这一层就可以自定义链路层的协议头部(header)了,下面是目 ...
- TCP ------ TCP创建服务器中出现的套接字
在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求.这个套接字不能用于与客户端之间发送和接收数据. accept()接受一个客户端的连接请求,并返回 ...
- python之优雅处理套接字错误
#!/usr/local/bin/python3.5 #coding:utf-8 import sys import socket import argparse def main(): #setup ...
- (转载)Linux 套接字编程中的 5 个隐患
在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开 ...
- Linux 套接字编程中的 5 个隐患
http://www.ibm.com/developerworks/cn/linux/l-sockpit/ 在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系 ...
- Linux 套接字编程中要注意的细节
隐患 1.忽略返回状态 第一个隐患很明显,但它是开发新手最容易犯的一个错误.如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失.反过来,这可能传播错误,使定位问题的源头变得困难. 捕获 ...
- windows和linux套接字中的select机制浅析
先来谈谈为什么会出现select函数,也就是select是解决什么问题的? 平常使用的recv函数时阻塞的,也就是如果没有数据可读,recv就会一直阻塞在那里,这是如果有另外一个连接过来,就得一直等待 ...
随机推荐
- iOS 9已下的获取APP进程信息
- (NSDictionary *)getAppInfo:(NSString *)exec withBundleID:(NSString *)bundle { if ([exec isKindOfCl ...
- TortoiseSVN使用笔记
TortoiseSVN版本冲突详解 下列步骤展示了如何将分支A中的修改合并到分支B. 1.在分支B的本地副本目录中选择"合并(Merge)". 2.选择“合并一个版本范围(Me ...
- Mapper3中Example的高级使用方法
http://zhuangxiaoda.leanote.com/post/Mapper3%E4%B8%ADExample%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6% ...
- Android 启动过程介绍【转】
本文转载自:http://blog.csdn.net/yangwen123/article/details/8023654 一般开机过程大致可以分为三个大阶段: 1. OS级别,由bootloader ...
- LightOJ1282 Leading and Trailing —— 指数转对数
题目链接:https://vjudge.net/problem/LightOJ-1282 1282 - Leading and Trailing PDF (English) Statistics ...
- CSS元素水平垂直居中方法总结(主要对大漠以及张鑫旭博客所述方法进行了归纳)
本文主要是对主流居中方法进行了归纳,有些地方甚至就是把别人的代码直接复制过来的,没有什么自己的东西,除了大漠以及张鑫旭的方法外,还有来自司徒正美.怿飞博客的几个方法 以下方法,由于测试环境的原因,IE ...
- .cxx_destruct crash
开发过程中遇到 YXTBaseLabelCell .cxx_destruct崩溃,查了下,会在调用类的dealloc方法时调用cxx_destruct,于是看了下代码,找dealloc可能会崩溃的原因 ...
- Java生成UUID不重复的id值
在Java中创建UUID在网上查资料才知道在Java中,变成了UUID.创建方式也出奇简单System.out.println( java.util.UUID.randomUUID());
- jmeter中的响应断言
断言就类似LoadRunner中的检查点.对上一个请求返回的信息,做字符串.数据包大小.HTML.XML.图片等做判断,确保返回的信息的准确性. jmeter的断言有好多,下面是一个响应断言 新建一个 ...
- codeforces A. Array 解题报告
题目链接:http://codeforces.com/problemset/problem/300/A 题目意思:给出n个数,将它们分成三批:1.所有数相乘的结果 < 0 2.所有数相乘的 ...