Comment puis-je limiter la vitesse de sortie de stdout?

24

J'utilise CentOS 5.7 et j'ai un utilitaire de sauvegarde qui a la possibilité de vider son fichier de sauvegarde sur stdout. Le fichier de sauvegarde est plutôt volumineux (plusieurs gigaoctets). La cible est un système de fichiers SSHFS. Pour ne pas monopoliser la bande passante et dégrader les performances du réseau, je voudrais limiter la vitesse d'écriture des données sur le "disque".

Comment puis-je limiter la capacité de stdoutbasé sur un nombre d'octets? Par exemple, limiter la capacité d'un processus à écrire à environ 768 bits / s.

Wesley
la source
6
@msw cette question concerne la limitation du débit stdout, la question précédente concernait la limitation du trafic réseau. Différentes bêtes ...
voretaq7
7
@msw Pour la dernière fois que j'ai vérifié, le but du réseau SE est de collecter une énorme quantité de connaissances dans des domaines spécifiques. Dans ce cas, il s'agit de * nix. La limitation de la sortie de stdoutest différente de la limitation de la bande passante. Ce n'est pas parce que le problème sous-jacent est le même que les futurs visiteurs ne trouveront pas chaque question utile indépendamment de l'autre. N'oubliez pas que les questions et réponses sont tout autant pour les googleurs que pour les véritables demandeurs, c'est pourquoi la suppression des questions répondues est un tel péché cardinal ici.
MDMarra

Réponses:

27

Vous pouvez ajouter un outil de limitation de débit à votre pipeline.

Par exemple, il y a pvqui a une option de limitation de débit:

-L RATE, --rate-limit RATE

Limitez le transfert à un maximum de RATE octets par seconde. Un suffixe "k", "m", "g" ou "t" peut être ajouté pour indiquer des kilo-octets (* 1024), des mégaoctets, etc.

Une alternative est l'outil bufferqui a:

   -u microseconds

Après chaque pause d'écriture pendant ce nombre de microsecondes. Par défaut à zéro. (Étonnamment, un petit sommeil, 100 usecs, après chaque écriture peut améliorer considérablement le débit sur certains lecteurs.)

maxschlepzig
la source
3

Je serais tenté de vider cela sur un disque local au lieu de l'écrire directement sur le volume distant. De cette façon, vous pouvez utiliser rsyncavec --bwlimitpour limiter facilement le transfert.

L'un des avantages de cette approche est que s'il y a un hoquet de connectivité avec la machine distante, le transfert est interrompu, mais la sauvegarde elle-même n'explose pas dans un éclat de gloire.

MDMarra
la source
C'est noté. Je souhaite que ce rsyncsoit une solution viable dans cette situation plutôt limitée dans laquelle je me trouve. = |
Wesley
3

pv (vue tuyau)

echo asdlfkjasdf | pv -q -L 12
Ole Tange
la source