Nous avons un très grand répertoire de cache Nginx (multi-Go) pour un site occupé, que nous devons parfois effacer d'un seul coup. J'ai résolu ce problème dans le passé en déplaçant le dossier de cache vers un nouveau chemin, en créant un nouveau dossier de cache sur l'ancien chemin, puis en rm -rf
utilisant l'ancien dossier de cache.
Dernièrement, cependant, lorsque j'ai besoin de vider le cache par une matinée chargée, les E / S rm -rf
affaiblissent les processus d'accès au disque de mon serveur, car Nginx et le serveur pour lequel il fait face nécessitent beaucoup de lecture. Je peux regarder la charge moyenne grimper pendant que les processeurs restent inactifs et rm -rf
absorbent 98 à 99% du disque IO iotop
.
J'ai essayé ionice -c 3
en invoquant rm
, mais cela ne semble pas avoir d'effet appréciable sur le comportement observé.
Existe-t-il un moyen d'apprivoiser rm -rf
pour partager davantage le disque? Dois-je utiliser une technique différente qui prendra ses repères ionice
?
Mise à jour:
Le système de fichiers en question est un magasin d'instances AWS EC2 (le disque principal est EBS). L' /etc/fstab
entrée ressemble à ceci:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Réponses:
Toutes les données recueillies sur cette page. Voici quelques options pour supprimer un grand répertoire de fichiers. Consultez la rédaction pour les détails de la façon dont cela a été produit.
* cs1 est un changement de contexte volontaire et involontaire
la source
rsync
fonctionne en ce moment. Il est peut-être trop tôt pour le dire et il pourrait être utile de ne pas l'exécuter au milieu d'une matinée chargée, mais le serveur est toujours réactif et la moyenne de charge est gérable.ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ /mnt/nginx-cache-old
nice
etionice
, ou du moins il n'a pas détruit le serveur comme l'arm -rf
fait.La suppression de fichiers n'effectue que des opérations de métadonnées sur le système de fichiers, qui ne sont pas influencées par ionice.
Le moyen le plus simple serait, si vous n'avez pas besoin de l'espace disque pour le moment, d'effectuer les
rm
heures creuses.La manière la plus complexe dont MIGHT fonctionne est d'étaler les suppressions dans le temps. Vous pouvez essayer quelque chose comme ce qui suit (notez qu'il suppose que vos chemins et noms de fichiers NE contiennent PAS d'espaces!):
Notez également que vous ne pouvez pas utiliser
rm -f
dans la première commande car la boucle ne s'arrêterait pas (cela dépend du code de sortie d'erreurrm
lorsqu'il n'y a pas d'argument).Vous pouvez le modifier en modifiant le nombre de suppressions par cycle (100 dans l'exemple) et la durée du sommeil. Cependant, cela pourrait ne pas vraiment fonctionner car le système de fichiers peut encore regrouper les mises à jour des métadonnées de manière à ce que vous ayez des problèmes avec votre charge d'E / S. Il suffit d'essayer.
la source
while
boucle semble faire l'affaire quandhead -n 50
. 100 augmentait encore lentement la moyenne de charge au-dessus de la critique, ce qui me dit qu'il y avait trop de conflits de ressources.Vous pouvez le coupler avec la commande "nice".
ionice -c 3 nice -19 rm -rf /some/folder
Cela change la priorité du processus sur la machine.
la source
nice
semble avoir à peu près autant d'effet queionice
, c'est-à-dire, rien d'appréciable.rm -rf
avait 99% de marcheiotop
.