2013-10-04 2 views
2

우리의 응용 프로그램에서 원격 프로 시저 호출은 자체 netty 기반 명령 디스패처 시스템으로 해결됩니다. 우리는 많은 모듈 (약 20 개)을 가지고 있으며 모든 모듈을 별도의 jvm-s에서 실행하려고합니다. 내 문제는 RMI가 각 JVM에 대해 약 17 개의 스레드를 생성한다는 것입니다. 나는 (내가 아는 한) RMI를 전혀 필요로하지 않는다.Java 응용 프로그램에서 RMI를 완전히 비활성화하는 방법이 있습니까?

jvm에서 RMI를 완전히 비활성화 할 수 있습니까? 또는 최소한이 스레드를 사용하지 않는 방식으로 구성하십시오.

+5

RMI를 사용하지 않는 경우 해당 스레드는 아무 작업도 수행하지 않습니다. 너무 조기에 최적화 된 것처럼 들립니다. –

+1

톰에게 감사드립니다. 한 대의 머신에서 20 개의 JVM이 실행될 때 사용되지 않는 스레드가 340 개 있습니다. 이것은 이미 하중에서 볼 수 있습니다. RMI가 사용하지 않는 쓰레드 17 개 (!)가 필요한 이유를 정말로 이해하지 못합니다. 이것은 'postmature'최적화입니다. – Szobi

+1

@Szobi 따라서 잠자는 스레드가 340 개이므로 성능에 영향을 줄 수있는 유일한 방법은 32 비트 Java에서 실행 중이고 가상 주소 공간이 부족한 경우입니다. 그게 아니라면, 그 스레드가 당신에게 정확히 무엇을 할 것이라고 생각합니까? – Voo

답변

3

StuartMarks is correct. RMI는 사용하기 전까지는 아무 스레드도 시작하지 않습니다.

아마도 당신은 어떤 식 으로든 그것을 사용하고 있습니다. JMX?

4

모니터링 응용 프로그램을 사용하여 JVM을 보았을 가능성이 가장 높습니다. 음 :이 모니터링 어플리케이션은 RMI를 사용하십시오. 따라서 모니터링 응용 프로그램, 프로파일 러 내에서 항상 RMI 스레드를 볼 수 있습니다. 그러면 CPU 시간을 사용하여 항상 볼 수 있습니다. 프로파일 링 정보 수집은 RMI를 통해 이러한 정보를 도구로 전송하지 않으면 작동하지 않습니다. 고유 한 운송 프로토콜을 구현하고 관리 Bean을 사용하도록 지시 할 수 있지만 개발 비용을 회수 할 수있는 충분한 자원을 확보 할 수 있을지는 의문입니다.

RMI를 사용하지 않으면 RMI가 스레드를 시작하지 않습니다. 그러나 이것을 사용하고 있다면, 이것을 인식하지 못하더라도 RMI를 비활성화하면 소프트웨어가 더 이상 작동하지 않는다는 것을 의미합니다.