2009-07-18 10 views
1

Je suis relativement nouveau en programmation et je travaille pour ma thèse sur un robot d'indexation Web. J'ai été fourni par un crawler de Web mais je l'ai trouvé être trop lent puisqu'il est simple thread. Il a fallu 30 minutes pour explorer 1000 pages Web. J'ai essayé de créer plusieurs threads pour l'exécution et avec 20 threads simultanément en cours d'exécution les 1000 pages Web ont pris seulement 2 minutes. Mais maintenant je rencontre des erreurs "Heap Out of Memory". Je suis sûr que ce que j'ai fait était faux qui était créer un pour boucle pour 20 discussions. Quelle serait la bonne façon de multi-thread le robot d'exploration Java sans donner les erreurs? Et en parlant de cela, est-ce que le multi-threading est la solution à mon problème ou pas?Comment gérer l'erreur OUT OF MEMORY pour plusieurs threads dans un Web Crawler Java

Répondre

2

La réponse simple (voir ci-dessus) est d'augmenter la taille de la mémoire JVM. Cela vous aidera, mais il est probable que le véritable problème est que votre algorithme d'exploration Web crée une structure de données en mémoire qui augmente proportionnellement au nombre de pages que vous visitez. Si tel est le cas, la solution peut être de déplacer les données dans cette structure de données vers le disque; par exemple. une base de données.

La solution la plus appropriée à votre problème dépend du fonctionnement de votre robot d'indexation, de son contenu et du nombre de pages à explorer.

0

En ce qui concerne la vitesse de votre programme:

Si votre robot d'exploration Web obéit au fichier robots.txt sur les serveurs , (qu'il devrait éviter d'être banni par les administrateurs du site) alors il peut y avoir peu de choses qui peuvent être faites.

Vous devez profiler votre programme, mais je m'attends le plus souvent à ce que votre robot d'exploration télécharge des pages html, et les administrateurs de site ne seront généralement pas satisfaits si vous téléchargez si vite que vous perdez leur bande passante. En résumé, le téléchargement d'un site complet sans nuire à ce site prendra un certain temps.

+0

salut daveb. Il obéit au fichier robots.txt, et le multi-threading a en quelque sorte résolu le problème de vitesse, maintenant je veux juste trouver le moyen le plus efficace d'un programme multi-thread, qui pourrait éviter les erreurs. Il doit y en avoir un, ou alors quel est le point entier des discussions alors. – Tobias

Questions connexes