2013-03-26 2 views
1

VisualVm을 사용하여 Tomcat에서 실행되는 웹 응용 프로그램을 프로파일 링합니다. Tomcat은 메모리 부족 오류로 인해 계속 충돌하므로 응용 프로그램에서 어떤 문제가 발생했는지 파악하려고합니다. VisualVm에서 메모리 프로파일 러를 실행할 때 대다수의 메모리가 String/Char []에 의해 처리되는 것처럼 보입니다. 그러나 지식이 나에게별로 도움이되지 않는 문자열의 상위 컨테이너를 파악할 수 없다면 나도 마찬가지입니다. 연구를 수행하면서 OQL과 rsizeof()을 찾았습니다. 예를 들어 SELECT rsizeof(o) FROM instanceof my.package.class o 일 수는 있지만 어떤 클래스가 필요한지 알 수 없으므로 대신 실제로 SELECT it.name, rsizeof(o) FROM instanceof Filter(Heap.classes(), "/my.package./(it.name)");과 같은 것을 실행할 수 있지만 작동하지 않습니다.특정 패키지에서 모든 객체 인스턴스의 전체 크기를 얻는 방법은 무엇입니까?

그래서 OQL은 무엇입니까? 이상적으로는 상위 10 위 이내로 제한하고 크기별로 정렬하고 싶습니다.

답변

1
내가 완전히 이해 확실하지 않다

하지만 ...

OQL은 다음과 같은 성명을 채택 할 수 있도록, 그것은 java.util.regex 패키지 안에있는 모든 개체를 찾을 자바 스크립트 기반의 표현 언어를 사용 (재귀 적으로) 그리고 그들의 크기를 합하면, 하나의 숫자를 반환 할 것입니다 :

sum(filter(heap.objects(), "/^java.util.regex./(classof(it).name)"), 'rsizeof(it)') 

이것은 작은 시간 동안 만 테스트 할 것입니다. 패키지 이름 앞에 ^을 보내십시오.

관련 문제