Je trouve un moyen de limiter l'utilisation de la mémoire en go. Mon application Mise en œuvre avec Go Language possède une grosse données qui doit être chargée dans la mémoire principale. Je souhaite donc limiter la taille de la mémoire maximale du processus à la taille spécifiée par l'utilisateur. P>
en langage C, en fait, j'accumule les tailles de la mémoire Malloc'ed pour le faire, mais je ne sais pas comment faire la même chose en langage d'aller. P>
S'il vous plaît laissez-moi savoir s'il y a un moyen de le faire. p>
Merci. p>
3 Réponses :
Peut-être que vous souhaitez utiliser ulimit conjointement avec votre code Go? P>
Que se passe-t-il après que la taille de la mémoire allouée atteigne la taille limitée?
Erreur de mémoire hors de mémoire? Juste un coup dans le noir .. Mais cela semblait être un outil que vous pourriez éventuellement utiliser.
Malheureusement hors de la mémoire in va signifie la panique d'exécution. Mais ce que l'on veut.
Le collecteur de poubelles Go n'est pas déterministe et il est conservateur. Par conséquent, à l'aide du runtime.memstats variable ne sera pas précis à votre objectif. p>
Correction de votre utilisation de la mémoire approximative en définissant la taille maximale des données que vous allez autoriser à être chargée à la fois dans un processus à l'aide de l'entrée de l'utilisateur. P>
Sa faible précision n'est pas un problème pour moi uniquement s'il est mis à jour atomiquement. Donc, j'ai trouvé que ce soit ou non atomique, mais je n'ai pas trouvé comment cela fonctionne.
Outre Runtime.Memstats Vous pouvez utiliser gosigar pour surveiller la mémoire système. P>
Vous voulez dire que vous voulez trouver un moyen de limiter l'utilisation de la mémoire, ai-je raison? Pas que vous atteignez les limites de mémoire de Go (s'il y en a une). Juste solidifier les faits ici.
Est le "Big Data" un fichier? Dans un tel cas, je recommanderais d'utiliser MMAP () au lieu de lire le fichier entier en mémoire à la fois.