1. 程式人生 > >JMeter中的HTTPS套接字錯誤

JMeter中的HTTPS套接字錯誤

https class true 調試 tls boolean 工作 間接 prop

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套接字錯誤