2010-06-02 5 views
4

연속 쿼리를 지원하는 데이터 스트리밍 시스템의 성능을 테스트하고 있습니다.자바 가상 머신 - 리소스를 어떻게 할당합니까?

작동 방식 : - 내 시스템에 데이터를 보내는 폴링 서비스가 있습니다. - 데이터가 시스템으로 전달되면 각 쿼리는 현재 시간의 스트림 창을 기준으로 평가됩니다. - 창 슬라이드는 데이터에 통과

내 문제는 이것이다 I 시스템에 더 많은 쿼리를 추가 할 때 데이터 속도를 극복 할 수 없기 때문에, 나는 감소에 처리량을 예상해야한다..

그러나 실제로는 처리량이 인 증가를 관찰합니다.

나는 이것이 내가이 JVM이 CPU를 할당하는 방식, 메모리 등 함께 할 수있는 뭔가 있다는 추측하고있는 경우이며 왜 이해할 수 없다

사람이 내 문제에 대한 되거 수 있습니까?

답변

3

대부분의 Java 가상 머신은 초기에 JVM 바이트 코드를 중첩합니다. 이는 네이티브 컴퓨터 코드 실행보다 약간 느립니다. JVM이 특정 코드 섹션을 반복적으로 사용하고 있음을 발견하면 코드 섹션을 원시 시스템 코드로 컴파일하여 처리 속도를 높입니다. 결과적으로 때로는 테스트 코드를 스트레스 테스트하거나 심지어 코드를 오랫동안 실행 상태로 두어 실행 속도를 늦추는 대신 실행 속도를 높이는 경향이 있습니다. 핫스팟 JVM (SUN의 기본 핫스팟)은 코드 실행 속도를 높이기 위해 원시 컴파일을 수행하는 가장 잘 알려진 JVM입니다.

또한 많은 Java 라이브러리는 이전에 만난 일부 라이브러리와 비교할 때 매우 성숙합니다. 즉, 요청을 처리하기 위해 스레드를 할당하는 대신 소켓에서 비 차단 리스너, 재 할당 가능한 작업자 스레드의 스레드 풀 또는 고 처리량 처리에 적합한 여러 가지 기술을 사용할 수 있습니다. 이것은 JIT (HotSpot-like) JVM의 자체 튜닝과 결합하여 자바 벤치마킹을 상당히 어렵게 만듭니다. 일반적으로 말하자면, 일을 실행하는 데 시간이 오래 걸릴수록 일이 더 빨리되는 경향이 있습니다.

2

언제나 그렇듯이 대답은 프로필입니다. 짐작할 수 있겠지만 Hotspot VM은 JIT 마술을하기 전에 많은 패스가 필요합니다.

+0

+1 - 내 추측이 될 수도 있습니다. –

2

귀하의 질문은 기술적 인면에 매우 가벼워 보이지만 여기에는 추측이 있습니다.

IO 스트리밍 서브 시스템이 비교적 효율적 (예 : select 기반)하고 개별 클라이언트가 네트워크 인터페이스를 포화시키지 않으면 서버 프로세스가 더 많은 데이터를 처리 할 수 ​​있기 때문에 많은 클라이언트가 있으면 총 처리량이 증가 할 수 있습니다.

0

JVM, JIT 컴파일러 및 가비지 컬렉터가 큰 영향을 미칠 수 있으므로 Java 응용 프로그램의 성능, 특히 마이크로 벤치 마크 (매우 작은 코드의 벤치마킹)는 Java에서 매우 어려울 수 있습니다. 프로그램의 성능.

자바 동시성 및 성능 전문가 브라이언 괴츠으로 "자바 이론과 실습"기사의 우수한 시리즈있다 :

0

또 다른 멍청한 이론 : 당연히 처리량이 증가 할 때까지 물론 처리량이 증가합니다. 평균 100 개의 쿼리를 처리 할 수 ​​있고 평균적으로 초당 10 개를 보내면 초당 10 개의 쿼리를 처리합니다. 로드를 평균 100qps로 증가 시키면 처리량은 (거의) 100qps입니다. 물론 그 후에 더 나 빠지게됩니다. 용량이 부족한가요? 죄송 합니다만 이것이 확실하게 배제 된 것이라면.

관련 문제