일요일, 7월 20, 2008

memory leak

저번주에서 만들고 있는 서버 모듈에서 memory leak이 나는걸 확인할 수 있었습니다.
오늘에 이르기까지 장장 10일 정도 이 문제로 고민하고 있는데, 이제야 해결의 실마리(?)를 찾은듯 합니다.
사실 단서는 발견한 초기에 진단툴을 통해 확인하였고, 경험상 해결의 결론도 알았습니다.
다만, 문제는 소스 전반을 모르고 있어서 실마리를 제대로 확인하지 못한것이 실수였습니다.

그 실수를 이후로 거의 일주일을 삽질을 해야 했습니다. 물런 그 일주일에 여러개의 다른일과 병행하여서 제대로 집중한것은 3-4일이지만...

우선 문제는 server모듈이 몇시간을 실행시켜두면 메모리를 조금씩 갈가 먹다가 죽는 경우가 생겨서 시작하게 되었고, 이것을 확인할때는 JProfiler 5, Oracle JRockit Mission Control 3.0.3로 확인하였습니다.

저의 시스템 환경은 대략 이렇습니다.
hsqldb(memory only), dbcp정도입니다.

우선 JRockit으로 떠본 클래스 Trace입니다.

위와같이 상황이 발생하고 close가 계속 증가했습니다. 자, 그럼 추측해 볼수있습니다.
어디서 close가 안돼는구나~ 좀더 범위를 좁혀 상상해 보자면, resultSet이 close가 안돼는 구나 이렇게요. jrocket이 지적해준 소스를 일일이 쫒아 다녀봣습니다. 그리고 본의아니게(?) hsqldb 소스를 뒤져보게 되었지요.

집에 가야겠어요. 2부는 ....

댓글 없음:

댓글 쓰기