すべてのプロダクト
Search
ドキュメントセンター

Performance Testing:サンプリングログで返される java.net.SocketException: Socket closed エラーを解決するにはどうすればよいですか?

最終更新日:Jan 08, 2025

問題

HTTPS API がストレステストに使用されています。ストレステストプロセス中に応答時間 (RT) が徐々に増加します。1 秒あたりのトランザクション数 (TPS) と成功率はゼロに低下するか、ゼロに低下する傾向があります。

サンプリングログに次のエラーメッセージが表示されます:

java.net.SocketException: Socket closed
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:542)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414)
at org.apache.jmeter.protocol.http.sampler.LazySchemeSocketFactory.connectSocket(LazySchemeSocketFactory.java:97)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.jmeter.protocol.http.sampler.hc.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:318)
at org.apache.jmeter.protocol.http.sampler.MeasuringConnectionManager$MeasuredConnection.open(MeasuringConnectionManager.java:114)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:695)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:454)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1189)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1178)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:498)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:424)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:255)
at java.lang.Thread.run(Thread.java:766)
            

サンプリングログの [タイミング ウォーターフォール] は、すべての時間が接続確立フェーズで費やされていることを示しています。

原因

ほとんどの場合、java.net.SocketException: Socket closed エラーは、接続タイムアウト期間が構成されていないために発生します。

解決策

HTTP リクエストサンプラーの [基本] タブで [keepalive を使用する] を選択した場合は、[詳細設定] タブで次のパラメーターを構成することをお勧めします。

  • [実装] パラメーターを [httpclient4] に設定します。

  • [接続] パラメーターを 10 ~ 60 秒の値にアイドル接続タイムアウト期間として設定します。これにより、ストレステストサーバーから返された Keep-Alive ヘッダーを受信できなかったために接続が切断されるのを防ぎます。

image

詳細については、「JMeterSocketClosed」をご参照ください。