멀티 코어 시스템에서 확장 성 문제가 있습니다. 내 응용 프로그램은 4 개의 핵심 코어 머신에서 하이퍼 스레딩이 활성화 된 8 개의 논리 코어에서 병렬로 과학 데이터를 처리합니다. 논리적 코어 당 하나의 8 개의 JVM을 시작합니다 (결국 JVM의 오버 헤드를 피하기 위해 하나의 JVM으로 전환 할 것입니다).멀티 코어 확장 성/충돌 문제를 감지하는 방법
문제는 확장 성이 최대 4 코어까지 거의 선형이지만 그 다음에는 거의 10-20 4 개의 "논리 코어"를 추가하여 성능을 향상시킬 수 있습니다.
나는 앱을 프로파일 링하여 스레드 동작을 분석했는데 너무 많이 기다리는 잠금이나 스레드를 발견하지 못했습니다. 나는 또한 pidstat를 검사했고, 예를 들어 과도한 문맥 전환 오버 헤드를 보지 못했다. 보다 정확하게는 자바 프로세스에서 컨텍스트 스위치가 거의 없다. CPU 사용량도 거의 100 %에 달하는 초고속이며 이는 괜찮은 것으로 보입니다.
제 질문은 물리적 코어의 수를 초과 한 후에이 잘못된 확장 성의 원인을 감지하고 분석하는 방법입니다. 어떤 도구와 메소드를 사용하여 경합이 어디에서 발생하는지 감지 할 수 있습니다. 어디에서 봐야합니까? 응용 프로그램의 아키텍처를 변경하지 않고 어떻게 든 고칠 수 있습니다 (예 : 머신 당 하나의 JVM으로 전환).
감사합니다.
감사합니다 당신의 대답은이 문제 공간을 명확히한다. 캐시 미스 (cache miss)에 대해 살펴보고 물리적 코어만으로 실행되도록 노력할 것입니다. – greg