Java 데몬 중 하나에서 메모리 누수를 잡으려고합니다. 메모리를 덤프하고 메모리 분석기 도구를 통해 분석 한 결과 누설의 대부분은 JDBC4Connection에 의한 것으로 나타났습니다.JDBC4Connection에서 메모리 누수가 발생했습니다.
10 instances of "com.mysql.jdbc.JDBC4Connection", loaded by "sun.misc.Launcher$AppClassLoader @ 0x2aaab620ed00" occupy 858,283,752 (81.55%) bytes. Biggest instances:
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab64ad820 - 87,110,160 (8.28%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab64af520 - 86,730,408 (8.24%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab64ad0e0 - 86,584,048 (8.23%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab64aede0 - 86,488,800 (8.22%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab61f5320 - 85,752,872 (8.15%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab64ae6a0 - 85,603,280 (8.13%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab64adf60 - 85,270,440 (8.10%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab61f4be0 - 85,248,592 (8.10%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab64afc60 - 85,120,704 (8.09%) bytes.
* com.mysql.jdbc.JDBC4Connection @ 0x2aaab61f5a60 - 84,374,448 (8.02%) bytes.
Keywords
com.mysql.jdbc.JDBC4Connection
sun.misc.Launcher$AppClassLoader @ 0x2aaab620ed00
저는 모든 MySQL 자원을 닫았지만 실제로이 문제의 원인을 찾을 수는 없습니다.
잡을 수있는 좋은 방법이 있습니까? 과거에 이것을 경험해 보았고 무엇을 찾아야할지 조언 해 줄 수 있습니까?
PS : 깊은 MAT 찾고 , 나는 다음과 같은 정보를 참조하십시오
com.mysql.jdbc.JDBC4Connection @ 0x2aaab64ad820 | 1,856 | 87,110,160 | 8.28% |- java.util.HashMap @ 0x2aaab62115a8 | 64 | 87,021,632 | 8.27% | '- java.util.HashMap$Entry[16384] @ 0x2aaae182e970| 131,096 | 87,021,568 | 8.27%
각 JDBC는 HashMap의 항목의 엄청난 금액을 (> 6000 개체) 보유 것, 그리고 그들을 해제하지 않습니다 조금도.
미리 감사드립니다.
조금 순진한 질문입니다. 그러나 JDBC 드라이버 자체에서 문제가 될 가능성이 있으며이를 업데이트하면 도움이 될 것입니다. 아니면 엄격하게 내 코드에 있어야할까요? – SyBer
shim 클래스 아이디어를 보내 주셔서 감사합니다. – SyBer
JDBC 드라이버에 누수가있을 수 있습니다. 릴리스 정보를 읽으면 수정 된 것으로 표시됩니다. 3 년에서 4 년 동안이 재료로 작업 한 결과, 내가 누출되었을 수있는 누출을 발견하지 못했습니다. – MBCook