여러 개의 프로세서에서 여러 스레드로 분할하고 각 스레드를 다른 스레드에서 실행하여 일련의 과학적 계산을 수행하는 Java 프로그램이 있습니다. 문제는 거의 분할 가능하므로 스레드간에 경합이나 통신이 없습니다. 액세스하는 유일한 공통 데이터는 액세스를 동기화 할 필요가없는 공유 정적 캐시와 하드 드라이브의 일부 데이터 파일입니다. 스레드는 또한 디스크에 계속 쓰지만 파일을 분리합니다.Mac OS에서 Java Random Slowdowns
내 문제는 때로는 프로그램을 실행할 때 아주 좋은 속도를 얻고 때로는 똑같은 것을 실행하면 매우 느리게 실행된다는 것입니다. 느리게 실행되고 Ctrl-C가 표시되고 다시 시작되면 일반적으로 다시 실행되기 시작합니다. 그것은 실행 중 초기에 느린 모드 나 빠른 모드로 설정되어 모드간에 절대로 전환하는 것처럼 보입니다.
jconsole에 연결했는데 메모리 문제가없는 것 같습니다. 천천히 실행되면서 프로파일 러에 연결을 시도했지만 프로파일 러가 연결되지 않습니다. 나는 -Xprof를 사용하여 실행을 시도했지만 느린 실행과 빠른 실행 사이의 덤프는별로 다르게 보이지 않는다. 나는 다른 가비지 콜렉터를 사용하고 메모리 공간의 여러 부분을 다르게 시도했다.
내 컴퓨터는 스트라이프 RAID 파티션이있는 Mac Pro입니다. 쓰레드가 디스크에서 읽는 데 너무 많은 시간을 소비한다면 CPU 사용량이 천천히 또는 빠르게 실행되는지 여부가 결코 떨어지지 않으므로 디스크 읽기 문제 일 수 있다고 생각하지 않습니다.
내 질문에 내 코드의 어떤 유형의 문제가 발생할 수 있습니까? 아니면 이것이 OS 문제 일 수 있습니까? Windows 컴퓨터에서 복제 할 수 없었지만 유사한 RAID 설정을 사용하는 Windows 컴퓨터가 없습니다.
"java -server"로 실행 해 봅시다. 아마 JIT를 사용하지 않기로 선택했을 수도 있습니다. 다른 스레드가 다른 프로세서/코어에서 실행되는지 어떻게 확인할 수 있습니까? –
@Piligrim, 그는 기본적으로 64 비트 Java 6이 포함 된 Mac OS X Snow Leopard를 사용하고 있으며 이미 서버 버전을 사용하고 있습니다. JVM이 무작위로 JIT를 사용하지 않기로 결정한다면 실제로 이상 할 것입니다. – Jesper
그래, 분명히 서버를 대체하는 -d64를 사용하고 있습니다. – javajustice