मेरे पास एक सर्वर घटक है जिसे मैं लोड-टेस्ट करने का प्रयास कर रहा हूं। सर्वर से सभी कनेक्शन टीएलएस 1.0 का उपयोग करते हैं।सूर्य का जावा एसएसएल कार्यान्वयन मेमोरी लीक कर रहा है?
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 मेगापिक्सल बढ़ जाती है जब मैं अपने सर्वर का भारी परीक्षण करता हूं, जो इसे 15-20 मिनट के बाद OutOfMemoryException
के साथ अवरुद्ध करता है।
मैंने इसे नेटबीन के प्रोफाइलर में भाग लिया और यह दिखाया कि स्मृति की वृद्धि टीएलएस एपीआई के भीतर गहरी थी।
क्या किसी ने कभी ऐसा कुछ अनुभव किया है? क्या कोई कामकाज है जो मैं अपने स्तर पर लागू कर सकता हूं?
संपादित करें।
.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)
क्या आप कुछ और विशिष्ट प्रोफाइलिंग परिणाम प्रदान कर सकते हैं? रिसाव टीएलएस से जरूरी नहीं है, यह आपके कोड में हो सकता है। –
कृपया इस छोटे से संभव प्रोग्राम को बनाएं जो इस व्यवहार को प्रदर्शित करता है और इसे आपके प्रश्न में जोड़ें। –