2009-05-07 6 views
2

HTML 페이지를 다운로드하기위한 Java 프로그램을 작성했습니다. 그러나 CPU 사용량은 100 %에 가깝지만 네트워크 사용량은 3 % 미만입니다. CPU가 병목 현상이 된 것 같습니다. CPU 사용량을 줄이려면 어떻게해야합니까?Java에서 CPU 사용량을 줄이는 것에 대한 제안 사항이 있습니까?

+3

소스 코드를 게시해야합니다. 그렇지 않으면 프로파일 러를 사용하는 것 외에 다른 도움을 줄 수 없습니다. –

+0

[다음은 시간이 걸리는 것을 알아내는 간단하고 효과적인 방법입니다. ] (http://stackoverflow.com/questions/266373/one-could-use-a-profiler-but-why-not-just-halt-the-program/317160#317160) –

답변

6

프로파일 러를 사용하여 병목 현상을 확인하고 수정하십시오! (VisualVM)

5

while 루프가 연속적이면 프로그램을 반복 간격 사이에 sleep으로 지정하십시오. 혼자서 웹 페이지를 다운로드하면 리소스 사용률이 그만큼 높아져서는 안되며, 병목 현상을 확인하는 프로파일 러를 살펴 보는 것이 좋습니다. 아마 여기에 코드를 게시하면 우리가 좀 더 당신을 도울 것입니다.

2

CPU 사용량이 오랜 기간 동안 100 %에 가까워지면 대부분의 경우 코드에 오류가 생길 수 있습니다 (무한 루프 또는 무언가). 응용 프로그램의 프로필을 작성하여 현재 상황을 확인하십시오. 코드에서 여러 지점의 현재 시간을 인쇄하는 것으로 시작하십시오. 그래도 찾을 수 없다면 프로파일 러가 필요할 것입니다.

+0

루프가 무한하다면 잡는 중 몇 개의 스택 추적으로 찾을 수 있습니다. 루프가 _not_ 무한하지만 길이가 길면 같은 방법이 작동합니다. –

3

문제를 확인하기 위해 할 수있는 한 가지 간단한 방법은 몇 가지 스택 추적을 잡는 것입니다. ctrl-/ctrl-break/jstack/jconsole/visualvm. 프로그램이 성능 문제가있는 곳에서 많은 시간을 낭비한다면 상당히 쉽게 문제를 볼 수 있습니다.

+1

++가 나를 때렸다. 그것은 내가 가장 좋아하는 방법이다. –

1

은 아마 당신은

내가 이벤트 중심의 통지 코드를 변경하려고 할 것입니다 ... 너무 빨리 데이터를 폴링합니다.

감사합니다.

1

읽었을 때 한 번에 char/byte를 읽으십니까? 그건 꽤 OS를로드합니다.

사용 BufferedReader의, 및/또는 ([] ... 숯불)를 사용하여 읽기 중 하나를 읽으려고 또는 내의 readLine() 당신이에 읽고있는 것을 따라.

0

언제든지 내장 된 Java XML DOM 항목을 사용하여 HTML을 구문 분석합니까? 과거의 경험을 통해 꽤 많은 CPU 사용량을 초래할 수 있습니다 (솔직히 말해서 가장 느린 구현입니다). 그렇다면 XML 구문 분석을 위해 타사 라이브러리 (예 : JDOM)를 고려할 수 있습니다.

관련 문제