2010-07-28 15 views
1

Nous mettons en place une plate-forme qui peut charger n'importe quel fichier JAR et exécuter des modèles statistiques. Le problème auquel je suis confronté en ce moment est que certains modèles sont trop grands pour tenir sur notre plate-forme, causant des erreurs de mémoire. Je sais qu'il y a eu des recherches à ce sujet, mais je ne les trouve plus. En substance, comment google app engine fait-il cela? Quelqu'un at-il entendu parler d'un espace de tas basé sur un disque?Recherche sur le bannissement des problèmes d'espace de tas?

+0

Je suppose que je devrais mentionner que nous avons déjà réglé le problème de la JVM pour notre modèle de référence. Mais, comme il s'agit d'une plate-forme, nous ne pouvons pas garantir que tout fichier JAR chargé par l'utilisateur ne fera pas exploser l'espace mémoire. C'est pourquoi je suis particulièrement intéressé par la solution de GAE. Je crois qu'ils ont roulé leur propre JVM mais à part ça, je n'ai aucun détail. Notre modèle de référence a couru le dossier avec 2GB de tas mais je peux voir le prochain modèle utilisant facilement plus que cela. – critium

Répondre

1

Je suppose que vous avez déjà étendu votre tas autant que cela est réalisable (compte tenu des contraintes de votre mémoire physique, de l'architecture du processeur, de la JVM et du système d'exploitation). Au delà, que la réponse est qu'aucune JVMs que je suis au courant d'implémenter l'espace de tas basé par disque. Cependant, ce n'est pas une idée totalement ridicule. Il y avait autrefois une communauté d'universitaires (principalement) travaillant sur le problème de la «persistance orthogonale» où les objets migrent de manière transparente entre la mémoire et un magasin persistant. Malheureusement, certains problèmes fondamentaux ont rendu cette technologie ... difficile. (Par exemple, la collecte des ordures dans le magasin persistant, l'obtention de points de contrôle logiquement cohérents avec des applications multithread et le traitement du changement de code.) Quoi qu'il en soit, le champ de recherche est devenu silencieux.

+0

C'est trop mauvais. Je me souviens qu'il y avait des documents de recherche que nous avions trouvés auparavant, mais je n'arrive pas à les trouver maintenant. Je suppose que c'est une impasse. – critium

0

Vous pouvez utiliser des commutateurs de ligne de commande pour augmenter l'espace de tas (généralement jusqu'à 2 Go).

Si cela ne vous suffit pas, vous devrez régler soigneusement l'utilisation de la mémoire de votre application, ce qui nécessiterait plus d'informations concernant sa conception.

1

L'espace du tas basé sur le disque est trivial - il est communément appelé mémoire virtuelle, et le processus de déplacement des données du disque vers la mémoire et vers l'arrière est connu sous le nom de permutation. Tout système d'exploitation conçu au cours des 3 dernières décennies peut le faire. Il ne fonctionne pas seulement pour le tas, mais aussi pour les piles, la mémoire de programme elle-même, etc. Il est tout à fait lent, et avec des prix de mémoire modernes souvent inutiles.

0

Vous pouvez utiliser ces paramètres pour spécifier la taille du tas

java -Xms1024m -Xmx2048m

Le premier est la taille initiale et la seconde est la taille maximale. S'il n'y a pas de RAM pour prendre en charge cette taille de segment, le système d'exploitation effectuera automatiquement la pagination/swaps pour prendre en charge cette taille de mémoire. Bien sûr, ce serait évidemment plus lent.