2009-10-05 8 views
2

Je lance un script qui manipule le texte sur le système de fichiers.Utilisation du fichier de page

Le script s'exécute sur des fichiers texte (.h, .cpp). Lorsque le script s'exécute, je vois que l'utilisation du PF augmente jusqu'à atteindre la quantité de VM allouée au fichier de la page.

Y at-il un moyen de vider la machine virtuelle pendant la course ou après?

J'opend une autre question concernant ce (pensé qu'il était question différente): Single sed command for multiple substitutions?

+0

Dans quel langage de programmation le script est-il écrit? Pouvez-vous révéler tout ou partie du script dans la question? –

+0

J'ai ajouté un lien dans la question – Asaf

+0

Cette question est identifiée avec "windows". Comment lancez-vous sed sur Microsoft Windows? Utiliser Cygwin? –

Répondre

0

Non, mais peut-être que vous pouvez changer le script pour consommer moins de mémoire.

Mise à jour. J'ai essayé de reproduire le problème sur Linux, correspondant à le script répertorié dans le other question. Dans bash:

while read fileName; do 

    echo 
    echo ----------------------------------------------- 
    echo For file $fileName : 

    while read matchItem; do 
     echo Searching for $matchItem 
     echo 
     sed -i "s/$matchItem/XXXXXXXXX $matchItem XXXXXXXXXXXXXX/" $fileName 
    done < allFilesWithH.txt 

done < all.txt 

J'utilise des fragments d'une base de données de séquences de protéines (grand fichier texte, FASTA, jusqu'à 74 MB) et des séquences peptidiques courtes pour le test (par exemple, qu'il y avait au moins 10 remplace par fichier). Pendant son exécution, aucun processus n'utilise de mémoire importante (comme je m'y attendais). La charge du processeur est de l'ordre de 50% pendant son exécution. Donc je ne peux pas reproduire le problème.

+0

Il consomme de la mémoire, car il fonctionne sur une grande quantité de fichiers. Le script exécute une seule commande (sed). Y a-t-il un problème de fuite de mémoire dans sed? P.S Je travaille avec sed sur shell de développement VxWorks – Asaf

+0

@Asaf: Non, sed a été conçu lorsque les systèmes étaient très contraints en mémoire. C'est peut-être votre scénario, mais c'est difficile à dire sans en savoir plus. –

+0

J'ai ajouté un lien dans la question – Asaf

1

Chunk ou lot vos opérations afin que vous puissiez utiliser votre mémoire plus efficace au lieu de charger juste tout en mémoire. Si aucun de vos fichiers n'est volumineux, limitez le nombre de threads qui chargent le texte de ces fichiers dans la mémoire. Si vous utilisez des fichiers volumineux, supprimez-les pour les traiter plus efficacement en utilisant la mémoire dont vous disposez.

+0

S'il vous plaît voir la façon dont j'utilise le script dans le commentaire ci-dessus. Je ne peux pas chunk ou le lot. La raison de consommer de la mémoire est parce que je l'exécute pour une très grande quantité de fichiers. – Asaf

+0

À un moment donné, vous ne libérez pas la mémoire que vous utilisez. Brisez le processus en morceaux maniables et vos problèmes de mémoire deviendront gérables. Pire des cas, vous pouvez tuer le processus et espérons que le GC va vider la mémoire pour vous. –

0

Le fichier d'échange est une ressource système qui ne peut pas être manipulée par un processus utilisateur. Dans ce cas, la taille du fichier d'échange est simplement un symptôme d'un problème d'application - l'application dépasse la limite de validation. Vous devez gérer le problème, pas le symptôme.

Questions connexes