0
저는 스트리밍 API를 통해 트위터를 크롤링하고 검색된 트윗을 키워드/해시 태그/사용자별로 필터링하려고했습니다. 여기 트위터 크롤러 : 왜 메모리가 커질까요?
사용하여 내 예입니다 (같은 문제가 Twitter4J으로 발생하지만) HBC :private Runnable defineRunnable(final BlockingQueue<String> queue) {
return new Runnable() {
@Override
public void run() {
while (true)
try {
System.out.println(queue.take());
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
그러나, 프로세스에서 성장을 계속 :
// After connection:
final BlockingQueue<String> queue = new LinkedBlockingQueue<String>(10000);
StatusesFilterEndpoint filterQuery = new StatusesFilterEndpoint();
filterQuery.followings(myListOfUserIDs);
filterQuery.trackTerms(myListOfKeywordsAndHashtags);
final ExecutorService executor = Executors.newFixedThreadPool(4);
Runnable tweetAnalyzer = defineRunnable(queue);
for (int i = 0; i < NUM_THREADS; i++)
executor.execute(tweetAnalyzer);
분석기 tweetAnalyzer
에 의해 반환되는 경우 기억.
두 질문 :이 메모리에 성장하지 않고 RAM을 포화되지 않도록
- 어떻게 제대로 크롤러를 설계하는 방법?
- 포화 상태가되지 않도록 큐 길이 (여기에서
10000
으로 설정)를 선택하는 방법은 무엇입니까? 나는이 길이를 사용하여 대기열이 계속 짹짹으로 가득 찼다는 것을 보았습니다. (결코 비어 있지 않습니다.) 큰 덩어리 인 700 트윗/분을 크롤링 할 수 있습니다.
감사합니다.
"클러스터에 배포"가 가장 좋은 옵션 일 수 있습니다. :) – Eleanore