Как читать строки с фиксированной скоростью?

Мне нужно прочитать большой файл журнала и отправить его через локальную сеть, используя (netbsd) netcat между двумя виртуальными машинами на одной рабочей станции хоста.

Я знаю, что netcat имеет интервал, но, насколько я могу судить, наименьший интервал, который вы можете использовать, – 1 строка в секунду.

  • измеритель скорости трубы с машиносчитываемым выходом
  • Есть ли способ инкапсулировать RTP / RTSP / RTCP в одно TCP-соединение?
  • Какой процесс отправляет TCP SYN на Solaris 10?
  • Почему виртуальные машины ужасно борются с i / o, когда хост находится под тяжелой нагрузкой?
  • трубы socat в трубу для нескольких операций open-write-close и open-read-close
  • 100.0% sy с плохой производительностью диска
  • Большинство файлов, которые мне нужно отправить таким образом, имеют сотни тысяч строк, а некоторые – около миллиона строк, поэтому одна строка в секунду невозможна.

    Если я просто использую кошку, мой главный компьютер / рабочая станция завершается, увязшая до невозможности использования.

    Используя bash и общие инструменты * nix, есть способ, которым я могу отправить файлы, но загружаю их в netcat со скоростью, например, 5-10 строк в секунду или что-то в этом роде?

    Конечной целью этого является позволить мне сделать некоторые доказательства тестирования концепции для централизованной базы данных журнала, которую я рассматриваю.

  • Сброс сокета сверстниками раз в 2 часа
  • Простой способ создания туннеля из одного локального порта в другой?
  • `unbuffer` или` stdbuf` для удаления буферизации stdout?
  • Почему системы становятся медленными при массивной записи на диск?
  • Использование netcat для перенаправления портов
  • ZFS Отправить в Pigz, netcat
  • 4 Solutions collect form web for “Как читать строки с фиксированной скоростью?”

    Если вы используете bash и pipe, и ищете легкое и грязное решение, вы можете попробовать использовать sleep .

    Вы можете использовать это, которое действует как cat но с паузой в каждой строке. while read i; do echo "$i"; sleep 0.01; done while read i; do echo "$i"; sleep 0.01; done . Вот пример чуть менее 100 строк в секунду.

     $ time (seq 1 100 | while read i; do echo "$i"; sleep 0.01; done) [...] real 0m1.224s user 0m0.012s sys 0m0.052s 

    pv , который доступен в виде пакета NetBSD , позволяет ограничить скорость канала.

     <large_file pv -L 1k | netcat … 

    Как оказалось, pv – идеальный инструмент здесь (по крайней мере pv 1.6.0). С -l (режим линии) флаг -L лимиты становятся линиями.

    Простые доказательства:

     seq 0 1000|pv -l -L100 > /dev/null 1k 0:00:10 [99.6 /s] [ <=> seq 0 10000|pv -l -L1k > /dev/null 10k 0:00:09 [1.03k/s] [ <=> 

    Может быть, cpulimit полезен. Он ограничивает процентное время процессора, которое может использовать процесс. Большинство дистрибутивов доступно из репозиториев. Проблема в том, что эта кошка и netcat могут использовать слишком мало CPU, чтобы быть действительно полезными для дросселирования.

    Linux и Unix - лучшая ОС в мире.