2016-06-24 3 views
0

다중 스레드 Java 응용 프로그램을 실행 중입니다. 응용 프로그램이 150 개의 스레드 근처에서 실행 중입니다. 해당 스레드의 자세한 메모리 사용량을 확인하고 싶습니다. 내가 top -H -p를 실행했을 때 응용 프로그램에서 150 개의 스레드를 실행하고있는 위치에서 14로 계산되었습니다. 이것은 매우 혼란스럽게 들립니다. 그래서 내가 최고 사령부를 통해 얻고있는 번호는 무엇인가?-H -p <JVMprocessid>는 무엇을 제공합니까? 자바 스레드 카운트?

아무도 이러한 행동을 이해하는데 도움을 줄 수 있습니까?

+0

당신은'-H'를 의미합니다 ('-h'는 도움이되고'-H'는 쓰레드입니다)? 그 번호는 어디서 얻었습니까? – zapl

+0

네, 저의 실수입니다. 그 최상위 -H -p . 그 명령은 나에게 번호를 주었다 – user2392631

+0

당신의 명령은 나를 위해 잘 작동하는 것처럼 보였다. 당신은'jvisualvm'이나'jstack'처럼 sth로 보았습니까? 모든 활성 자바 스레드를 표시 할 수 있습니까? finalizer, gc, .. 빈 응용 프로그램의 스레드 수가 이미 해당 영역에 있기 때문에 14가 거의 실행되지 않음을 의미합니다. – zapl

답변

0

리눅스에서 jvm 스레드 당 하나의 원시 스레드가 있습니다. JVM 스레드는 응용 프로그램 스레드와 JVM이 GC 및 기타 관리에 사용하는 내부 스레드를 모두 포함합니다. 일반적으로 하드웨어, 구성 등에 따라 다르지만 이들 중 4-10 개가 있습니다.

top -H는 jvm 스레드 수를 정확하게 반영하며 응용 프로그램 스레드 수는 jvm 스레드입니다. 스레드.

150 개의 응용 프로그램 스레드 사양이 고정 된 값이 아닌 최대 값으로 해석 될 가능성이 있습니다.