J'ai le système de fichiers ext3 monté avec les options par défaut. Sur cela, j'ai des fichiers de ~ 100Go.
La suppression de l'un de ces fichiers prend du temps (8 minutes) et génère beaucoup de trafic io, ce qui augmente la charge du serveur.
Existe-t-il un moyen de rendre la société moins perturbante?
Réponses:
La réponse la plus intéressante était à l’origine enterrée dans un commentaire sur la question. Voici une réponse de première classe pour la rendre plus visible:
Ce lien est une analyse incroyablement approfondie de l’exploration et de la découverte d’une solution viable.
Notez aussi:
L'article dit:
ce qui est vrai, mais l'utilisateur TafT indique que si vous ne voulez aucune perturbation, alors
-c3
«inactif» serait un meilleur choix que-c2
«meilleur effort». Il a l'habitude-c3
de construire en arrière-plan et a trouvé que cela fonctionnait bien sans provoquer l'attente de la construction pour toujours. Si vous utilisez réellement 100% io,-c3
la suppression ne sera jamais terminée, mais il ne s'attend pas à ce que ce soit ce que vous avez basé sur le test effectué.la source
Mettez à niveau vers ext4 ou un autre système de fichiers moderne utilisant des extensions. Puisque ext3 utilise le schéma de blocs indirects plutôt que les extensions, la suppression de gros fichiers nécessite inévitablement beaucoup de travail.
la source
Vous pouvez essayer Ionice . Cela ne le fera pas plus vite, mais cela pourrait le rendre moins perturbant.
la source
En termes d’efficacité, l’utilisation d’un fichier par fichier n’est pas optimale, car elle nécessite un fork et un exec pour chaque fichier.
En supposant que vous ayez un fichier list.txt contenant les fichiers que vous voulez supprimer, cela serait plus efficace, mais ça va quand même être lent:
Une autre approche consisterait à:
nice -20 xargs -i rm {} < list.txt
(cela prendra moins de temps mais affectera grandement votre système :)
ou
Je ne sais pas à quelle vitesse cela serait, mais:
ou
Créez un point de montage spécial avec un système de fichiers rapide (en utilisant un périphérique de boucle?), Utilisez-le pour stocker et supprimer vos fichiers énormes.
(Peut-être déplacer les fichiers là-bas avant de les supprimer, c'est peut-être plus rapide ou peut-être simplement le démonter quand vous voulez que les fichiers disparaissent)
ou
cat /dev/null > /file/to/be/deleted
(donc il est de taille zéro maintenant) et si vous voulez le faire disparaître justerm -rf <file>
maintenantou même mieux
laisse tomber le chat et fais juste
# > /file/to/be/emptied
la source
J'ai eu du mal à supprimer le répertoire à un rythme raisonnable, il s'avère que le processus consistait à verrouiller le disque et à créer une pile de processus essayant d'accéder au disque. ionice ne fonctionnait pas, il continuait simplement à utiliser 99% de l'E / S du disque et bloquait tous les autres processus.
Voici le code Python qui a fonctionné pour moi. Il supprime 500 fichiers à la fois, puis prend une pause de 2 secondes pour laisser les autres processus faire leur travail, puis continue. Fonctionne très bien.
la source
Mes deux centimes.
J'ai déjà eu ce problème. "Dans les scripts séquentiels qui doivent être exécutés rapidement, le processus supprime beaucoup de fichiers" .. Ainsi, le "rm" rendra la vitesse de ce script proche du temps IO wait / exec.
Donc, pour accélérer les choses, j’ai ajouté un autre processus (script bash) lancé par cron .. comme un ramasse-miettes, il supprime tous les fichiers d’un répertoire particulier.
Ensuite, j'ai mis à jour le script d'origine en remplaçant le "rm" par un mv par un "garbage folder" (renommez le fichier en ajoutant un compteur à la fin de son nom pour éviter les collisions).
Cela fonctionne pour moi, le script s'exécute au moins 3 fois plus vite. mais cela ne fonctionne bien que si le dossier de mémoire et le fichier d'origine se trouvent sous le même point de montage (même périphérique) afin d'éviter la copie de fichier. (mv sur le même appareil consomme moins d’IO que de rm)
J'espère que ça aide ..
la source
Notez également que la réponse de Dennis Williamson, qui suggère ionice comme solution de contournement du chargement, ne fonctionnera que si votre périphérique de blocage utilise le planificateur CFQ io.
la source
Vous pouvez essayer de créer un système de fichiers en boucle sur lequel stocker vos sauvegardes.
Ensuite, lorsque vous souhaitez effacer les sauvegardes:
Presto! L'ensemble du système de fichiers virtuel est effacé en quelques instants.
la source
Vous pouvez utiliser le multitheading avec xargs
où 30 est le nombre de threads que vous souhaitez créer. Si vous utilisez zéro, le système crée le nombre maximal de threads disponibles pour l'utilisateur qui exécute la tâche.
la source
find
a une-delete
option qui est une bien meilleure alternative./ dev / null est un fichier et non un répertoire. Vous ne pouvez pas déplacer un fichier, dans un fichier, ou vous risquez de l'écraser.
Je ne pense pas que ce soit pratique. Il utiliserait inutilement plus d'E / S que ne l'aurait souhaité le PO.
la source
En fait , il est un appareil et toutes les données écrites il obtient donc mis au rebut
mv <file> /dev/null
est logiquela source