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鏈接將產生大量沒必要要的網絡開銷。
若是負載測試遇到負載均衡器前端的應用程序,請確保負載均衡器配置了足夠的最大鏈接限制以處理預期負載。一樣,驗證負載平衡算法不會將過多的流量偏向一個或多個應用程序服務器實例,而且該負載充分分散在應用程序服務器後端之間。