2012-04-17 5 views
0

전체 응용 프로그램이 엉망입니다. 첫 번째 기록은 mingled up입니다. 응용 프로그램은 모든 정기적 인 간격마다 얼어 붙어있는 것처럼 보입니다. 매분마다 거의 30 분 동안 얼어 붙는 것 같습니다. 대부분의 작업을 수행하는 일반 스레드는 길을 잃은 것으로 보이며 그 흔적도 없습니다. 벌채 반출. 소켓은 사용자의 보고서마다 매달린 것 같습니다.Java 응용 프로그램의 일관성없는 상태

여전히 약간의 단서, 무엇이 이들을 유발 했는가? CPU 사용 기록은 그 당시의 모든 것을 잘 보여줍니다. 내가 추측 할 수밖에 없듯이, 출발점이나 어떤 특정한 인스턴스가 내 마음을 벗어났다는 것을 지적 해 주실 수 있습니까? 나는이 모든 혼란에 대한 가능한 이유를 해독 할 수 있습니다.

감사합니다, Mawia

+0

메모리 사용량을 확인 했습니까? JVM의 힙 한계는 무엇입니까? '-Xmx' 명령 행 옵션을 의미합니다. – AlexR

+0

xms -1000MB XMX-1500MB! – mawia

+0

코드가 큰 경우 문제 영역을 좁히고 여기에 게시하십시오. 실수로 스레드를 지연시키고 있기 때문에 정기적 인 고정 간격이 될 수 있다고 말할 수 있지만 실제로 코드를 보지 않고는 사실인지 알 수있는 방법이 없습니다. –

답변

2

제한된 메모리가있는 가상 박스에서 GC를 집중적으로 사용하는 Java 응용 프로그램을 실행할 때 이러한 동작이 발생했습니다. 게스트 OS에는 스왑 메모리를 사용하기에 충분한 "실제"메모리가 없었습니다. 그러나 스왑은 호스트 OS의 물리적 디스크에 매핑 된 "가상"디스크에있었습니다.

게스트 OS에서 실행되는 java GC가 작동하기 시작하자 실제로 호스트 OS의 실제 디스크에있는 힙에서 가비지를 제거해야했습니다.

귀하의 상황은 동일하지만 아마 유사하다고 말할 수 없습니다. 그러므로 얼마나 많은 물리적 인 메모리가 있는지, 그리고 얼마나 자주 GC를 실행하는지, 그리고 얼마나 많은 메모리를 지울지를 확인하십시오. JVM에 1GB를주었습니다. 충분한 물리적 기억이 있습니까? 아마도 JVM 힙은 실제로 OS 스왑 메모리, 즉 디스크에 있습니까?

신청서를 조사하십시오. 대용량 메모리를 할당하고 너무 자주 정리할 수 있습니까? 캐시 등을 사용할 수 있습니까? 퍼머 겐 (perm gen)이 얼마나 많은 메모리를 사용했는지, 그리고 짧은 생체 (short-living objects)를 어떻게 사용하고 있는지 확인하십시오.

1

왜 당신은 샘플 기반 모니터링 도구를 사용하여 프로그램에 연결을 시도하고 스레드와 JVM의 서브 시스템이 무엇을하고 있는지 표시되지 않는 이유는 무엇입니까? JVisualVM은 JDK와 함께 제공되며 사용하기 쉽습니다.

+0

아! 그것은 이미 연결되어 있습니다. 그러나이 모든 것은 과거에는 아무도 시스템을 모니터하지 않을 때 발생했습니다. – mawia

관련 문제