加密:每次New一個BouncyCastleProvider導致的記憶體洩漏
https://yq.aliyun.com/ziliao/240745
本文講的是每次New一個BouncyCastleProvider導致的記憶體洩漏, 問題原因 生產伺服器的記憶體一直升高,直到宕機。記憶體分析的結論是:記憶體洩漏。 下載dump檔案,經過解析堆疊日誌,如下圖所示: The class "javax.crypto.JceSecurity", loa
問題原因
生產伺服器的記憶體一直升高,直到宕機。記憶體分析的結論是:記憶體洩漏。
下載dump檔案,經過解析堆疊日誌,如下圖所示:
The class "javax.crypto.JceSecurity", loaded by "<system class loader>", occupies 2,522,379,928 (95.73%) bytes. The memory is accumulated in one instance of "java.lang.Object[]" loaded by "<system class loader>".Keywords java.lang.Object[] javax.crypto.JceSecurity
是BouncyCastleProvider 這個類裡面的方法, 全是靜態的, new一個多一個, GC不回收, 慢慢就宕機。
dump程式碼如下:
解決方案
private static org.bouncycastle.jce.provider.BouncyCastleProvider bouncyCastleProvider = null;
public static synchronized org.bouncycastle.jce.provider.BouncyCastleProvider getInstance() {
if (bouncyCastleProvider == null) {
bouncyCastleProvider = new org.bouncycastle.jce.provider.BouncyCastleProvider();
}
return bouncyCastleProvider;
}
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", getInstance());
記憶體洩漏分析工具參見:http://blog.csdn.net/shenhaiwen/article/details/54670234
以上是雲棲社群小編為您精心準備的的內容,在雲棲社群的部落格、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜尋按鈕進行搜尋java , 記憶體洩露 oom ,以便於您獲取更多的相關知識。