私は負荷テストをしようとしているサーバーコンポーネントを持っています。サーバーへのすべての接続はTLS 1.0を使用します。私は私が欲しいと本質的に多くのスレッドでこれを行う簡単なテストプログラムを持って次のようにSunのJava SSL実装でメモリがリークしていますか?
Full TLS handshake to the server
send a request
read reply
close connection
repeat ad nauseam
私の仮想マシンは、次のとおりです。
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Server VM (build 14.2-b01, mixed mode)
私はメモリリークを持っています。サーバーを頻繁にテストすると、メモリのフットプリントが約1メガバイト増加し、OutOfMemoryException
で15〜20分後にブロックされます。
Netbeanのプロファイラで実行したところ、TLS API内でメモリの増加が深刻であることがわかりました。
似たような経験をしたことがありますか?自分のレベルで実装できる回避策はありますか?
編集。要求されたとして、ここではこれらのバイトの多くを生成し、プロファイリングコール・トレースは[]です:
.java.io.ByteArrayOutputStream.<init>(int)
..com.sun.net.ssl.internal.ssl.OutputRecord.<init>(byte, int)
...com.sun.net.ssl.internal.ssl.OutputRecord.<init>(byte)
....com.sun.net.ssl.internal.ssl.AppOutputStream.<init>(com.sun.net.ssl.internal.ssl.SSLSocketImpl)
.....com.sun.net.ssl.internal.ssl.SSLSocketImpl.init(com.sun.net.ssl.internal.ssl.SSLContextImpl, boolean)
......com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(com.sun.net.ssl.internal.ssl.SSLContextImpl, java.net.Socket, String, int, boolean)
.......com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(java.net.Socket, String, int, boolean)
<my code>
私は置くことができ、より多くのは、これは長いだろう...があります。プロファイラは、私を与えることを私はあなたのエントリポイントを教えてあげる:
....com.sun.net.ssl.internal.ssl.AppOutputStream.<init>(com.sun.net.ssl.internal.ssl.SSLSocketImpl)
....com.sun.net.ssl.internal.ssl.HandshakeOutStream.<init>(com.sun.net.ssl.internal.ssl.ProtocolVersion, com.sun.net.ssl.internal.ssl.ProtocolVersion, com.sun.net.ssl.internal.ssl.HandshakeHash, com.sun.net.ssl.internal.ssl.SSLSocketImpl)
....com.sun.net.ssl.internal.ssl.SSLSocketImpl.sendAlert(byte, byte)
..com.sun.net.ssl.internal.ssl.AppInputStream.<init>(com.sun.net.ssl.internal.ssl.SSLSocketImpl)
..com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake()
..com.sun.net.ssl.internal.ssl.HandshakeInStream.<init>(com.sun.net.ssl.internal.ssl.HandshakeHash)
より具体的なプロファイリング結果を提供できますか?リークは必ずしもTLSのものではなく、あなたのコード内にある可能性があります。 –
この動作を示す最小限のプログラムを作成し、質問に追加してください。 –