如何定位native內存泄露問題?

運行一段時間後,程序出現異常:部分操作無法進行.異常日誌如下:
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Unknown Source)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:387)
at com.huawei.unistar.quoter.framework.guide.internal.GuideDialog.run(GuideDialog.java:585)
at com.huawei.unistar.quoter.framework.guide.internal.GuidePage.needShowPage(GuidePage.java:99)
at com.huawei.unistar.quoter.framework.guide.internal.Guide.getStartingPage(Guide.java:123)
at org.eclipse.jface.wizard.WizardDialog.showStartingPage(WizardDialog.java:1173)
此時在任務管理器裏面發現進程內存大小几乎達到1.3G問題分析:  1,首先懷疑是JVM堆空間內存泄露.於是用jmap生成dump文件,使用MAT工具進行OOM分析,發現JVM堆空間使用情況良好(設置最大堆空間爲512M,而程序出現問題時,堆空間也就使用了300M左右).
而且也沒有發現內存泄露點.    2,然後懷疑是自動化工具引起的native內存泄露.因此特地手工重複測試一遍,結果顯示:程序運行良好,jvm堆空間大小一直穩定在一個區間;而且用工具分析,也沒有發現內存泄露.       根據上面兩個步驟地分析,因此我們懷疑是自動化工具(或測試用例)引起的native內存泄露.苦於對AutoMan和RFT工具(無源碼)的不瞭解,不好從java層面下手分析問題.
  所以想逆過來分析:從native內存着手,找出內存泄露的原因!
1、線程數很少,也大概只有15個左右。
2、執行一系列用例後就出現這個情況,必現的。
2.1 懷疑是Autonman的問題,因爲這些用例,用手工跑就不會出現,一旦用Automan集成就出問題。
2.2 又懷疑是RCP應用程序的問題,因爲老的版本,自動化用例都能執行,最近只有被測的應用程序更新了。
2.3 莫非是 RCP應用程序 的場景,觸發了 automan的問題。
我覺得這種情況一般都是被測試場景的原因比較多一點。

1.是否測試流程沒有走完就報錯了(有可能自動測試邏輯裏面有閉環?)。3.其他原因(業務邏輯bug,JDK bug,測試工具bug)

來源:https://zhidao.baidu.com/question/2073750409402196748.html

發佈了26 篇原創文章 · 獲贊 27 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章