2009-07-18 4 views
1

저는 프로그래밍이 새로 생겼으며 웹 크롤러에서 논문 작업을하고 있습니다. 나는 웹 크롤러에 의해 제공되었지만 단일 스레드이므로 너무 느린 것으로 나타났습니다. 1000 개의 웹 페이지를 크롤링하는 데 30 분이 걸렸습니다. 실행을 위해 여러 개의 스레드를 만들려고했는데 동시에 1000 개의 웹 페이지를 실행하는 20 개의 스레드가 2 분 밖에 걸리지 않았습니다. 하지만 지금은 "힙 메모리 부족"오류가 발생했습니다. 나는 무엇을했는지 틀림 없다고 확신했는데, 루프를위한 을 20 개의 스레드로 만든다. 오류를 내 보내지 않고 Java 크롤러를 멀티 스레드하는 올바른 방법은 무엇입니까? 그리고 말하기, 내 문제에 대한 해결책을 멀티 스레딩입니까?Java 웹 크롤러의 다중 스레드에 대해 OUT OF MEMORY 오류를 처리하는 방법

http://www.informix-zone.com/node/46

답변

2

간단한 대답 (위 참조)은 JVM 메모리 크기를 늘리는 것입니다. 이것은 도움이 될 것입니다. 그러나 실제 문제는 웹 크롤링 알고리즘이 방문한 페이지 수에 비례하여 증가하는 메모리 내 데이터 구조를 생성한다는 것입니다. 그렇다면 데이터 구조의 데이터를 디스크로 옮기는 것이 해결책 일 것입니다. 예 : 데이터베이스.

웹 크롤러의 작동 방식, 수집 대상 및 크롤링해야하는 페이지 수에 따라 문제에 가장 적합한 해결책이 결정됩니다.

3

나의 첫번째 제안은 당신이 JVM의 힙 크기를 증가시킬 것입니다

웹 크롤러 서버에서 robots.txt 파일을 따르는 경우 (사이트 관리자가 금지하지 않도록해야 함) 그러면 수행 할 수있는 작업이 거의 없을 수 있습니다.

프로그램을 프로파일 링해야하지만, 대부분 크롤러가 html 페이지를 다운로드하고 사이트 관리자는 대역폭을 너무 빨리 다운로드하면 사이트 관리자는 일반적으로 행복하지 않을 것으로 예상됩니다.

요약하면 사이트를 다 치지 않고 전체 사이트를 다운로드하는 데는 어느 정도 시간이 걸릴 것입니다.

0

프로그램의 속도에 관하여 :

+0

안녕 daveb. 그것은 robots.txt 파일을 따르고 멀티 스레딩은 속도 문제를 해결합니다. 지금은 오류를 피할 수있는 멀티 스레드 프로그램에 가장 효율적인 방법을 찾고 싶습니다. 하나가 있어야합니다. 그렇지 않으면 스레드의 전체 지점이 무엇입니까? – Tobias