天天看點

JMeter中的HTTPS套接字錯誤

Apache JMeter對啟用SSL的應用程式執行性能和/或負載測試時,SSL套接字錯誤可能是經常遇到的麻煩,嚴重阻礙了您的測試工作。本文重點介紹如何通過相應地配置和調優JMeter來克服這些與連接配接相關的錯誤。

在Jmeter中訓示SSL套接字問題的錯誤消息示例包括:

<code>Non HTTP response code: java.net.SocketException Non HTTP response message: Connection reset</code>

<code>Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: connect timed out</code>

<code>Non HTTP response code: java.net.SocketTimeoutException Non HTTP response message: Read timed out</code>

強烈建議使用最新版本,以利用新的改進群組件。

避免在最後一個版本之前使用早于3個版本的版本。

将以下内容添加到jmeter.properties以啟用JMeter Logger面闆:

<code>jmeter.loggerpanel.display=true</code>

要通過JMeter菜單将日志級别增加到DEBUG:

<code>Options -&gt; Log Level -&gt; DEBUG</code>

JMeter中的HTTPS套接字錯誤

要通過log4j2.xml啟用上下文和線路日志記錄的調試模式:

JMeter中的預設連接配接逾時是開箱即用的20秒。為幫助診斷和解決套接字連接配接問題,增加此值通常很有幫助。為此,請在JMeter測試計劃中為HTTP Request對象指定更高的連接配接逾時。例如,設定為60000(毫秒)以将總逾時增加到60秒。

從“配置元素”選項中添加“HTTP請求預設”配置元素(即,右鍵單擊測試計劃并添加此“HTTP請求預設值”)。

JMeter中的HTTPS套接字錯誤

在“HTTP請求預設值”中,有一個選項 - 連接配接'逾時(毫秒)'在此字段中指定您的連接配接逾時值,它将應用于所有子采樣器。如果在測試計劃級别添加了“HTTP請求預設值”,則它将應用于所有采樣器和所有線程組。

JMeter中的HTTPS套接字錯誤

要指定單獨的連接配接逾時,請在每個采樣器的相同字段中指定。單個采樣器連接配接逾時将覆寫“HTTP請求預設”連接配接逾時值。

JMeter中的HTTPS套接字錯誤

JMeter可以選擇延遲線程建立,直到線程開始采樣(即,在任何線程組延遲和線程本身的加速時間之後)。這允許非常大的線程總數,前提是不會有太多并發的線程。

JMeter中的HTTPS套接字錯誤

JMeter使用更多資源來模拟浏覽器并行擷取嵌入資源,如css,gif,js和靜态内容。如果有許多使用者,則可能會建立太多線程,并且由于JMeter端的帶寬争用而開始對響應時間産生負面影響。如果要模拟許多使用者,建議禁用并行下載下傳,因為JMeter不會模拟浏覽器的緩存,浏覽器也不會在後續請求中重新下載下傳嵌入式資源。

JMeter中的HTTPS套接字錯誤

如果您的應用程式伺服器層上有内部簽名或自簽名證書,則需要将JMeter配置為将這些證書識别為有效。要解決此問題,請修改system.properties并使用相關的簽名者證書配置信任庫。

<code># Truststore properties (trusted certificates) javax.net.ssl.trustStore=C:/trust.jks javax.net.ssl.trustStorePassword=sample</code>

如果您的應用程式需要SSL用戶端證書身份驗證或授權,則需要建立密鑰庫并在指向該密鑰庫的system.properties檔案中設定以下屬性:

<code># Keystore properties (client certificates) javax.net.ssl.keyStore=C:/key.jks javax.net.ssl.keyStorePassword=sample</code>

在jmeter.properties中設定下面的屬性,以調整JMeter處理SSL會話,協定和密碼的方式:

要啟用SSL會話共享:

<code>https.sessioncontext.shared=true</code>

設定預設HTTPS協定級别:

<code>https.default.protocol=TLSv1.2</code>

要啟用多個HTTPS協定:

<code>https.socket.protocols=TLSv1 TLSv1.2</code>

要啟用多個密碼:

<code>https.cipherSuites=TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256</code>

要在測試期間保留SSL上下文:

<code>https.use.cached.ssl.context=true</code>

在http 4上設定重試次數

<code>httpclient4.retrycount=1</code>

為避免HTTP連接配接池出現問題,可能需要在JMeter中啟用陳舊連接配接檢查。在JMeter測試運作期間接收“Socket Closed”異常時,應使用此步驟。要啟用過時連接配接檢查,請在user.properties中設定以下屬性:

<code>http.connection.stalecheck$Boolean=true</code>

Keep-Alive是HTTP協定的一個非常重要的特性。它允許用戶端通過單個TCP連接配接發出多個HTTP請求。這提供了很大的性能提升,因為否則建立許多TCP連接配接将産生大量不必要的網絡開銷。

如果負載測試遇到負載均衡器前端的應用程式,請確定負載均衡器配置了足夠的最大連接配接限制以處理預期負載。同樣,驗證負載平衡算法不會将過多的流量偏向一個或多個應用程式伺服器執行個體,并且該負載充分分散在應用程式伺服器後端之間。