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
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.
Ma première suggestion est que vous augmentez la taille du tas pour la machine virtuelle Java:
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.
- 1. Delphi Out of resources
- 2. Exception Subsonic out of memory
- 3. Comment gérer plusieurs flux en Java?
- 4. Comment lancer plusieurs threads depuis Java EE?
- 5. Web Crawler Application
- 6. Un ou plusieurs pools de threads pour le serveur Java?
- 7. Javascript Member Functions Out of Scope
- 8. Comment résoudre l'avertissement "Bignum out of Float range"?
- 9. Java: synchronisation des threads sur plusieurs serveurs
- 10. Créer plusieurs threads Java à la fois
- 11. Pour plusieurs threads ou pas
- 12. Meilleures façons de gérer le temps d'exécution maximal pour les threads (en Java)
- 13. Que dois-je faire pour implémenter un serveur COM "out of proc" en C#?
- 14. Web crawler liens/page logique en PHP
- 15. Threads Java
- 16. Java - Gérer plusieurs événements avec une fonction?
- 17. Comment gérer plusieurs projets dans CodeIgniter?
- 18. Comment gérer la même socket dans différents threads?
- 19. problème iphone sqlite: "out of memory" sur sqlite3_prepare_v2
- 20. Comment faire pour exécuter plusieurs processus/threads/frontends Tornado?
- 21. Comment utiliser les bibliothèques communes pour plusieurs projets Web Java
- 22. MP3 link Crawler
- 23. instances de crawler
- 24. Python win32 com: comment gérer le paramètre 'out'?
- 25. Comment configurer le fournisseur de session Out of Process? (ASP.NET - IIS7)
- 26. threads en Java
- 27. Comment gérer des données énormes dans Java
- 28. Comment gérer une relation plusieurs à un dans Django
- 29. Comment gérer plusieurs instances d'entrée dans un champ
- 30. Comment gérer CLS-conforme dans une référence Web?
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