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

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

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

Большинство файлов, которые мне нужно отправить таким образом, имеют сотни тысяч строк, а некоторые – около миллиона строк, поэтому одна строка в секунду невозможна.

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

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

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

  • Есть ли способ узнать, прослушивает ли процесс прослушивание через порт TCP сообщение?
  • Проблемы с nmap-сканированием с использованием прокси-сервера ssh с proxychains
  • Как запустить различные алгоритмы управления перегрузками в FEDORA 17 ..?
  • Как сервер узнает, какой клиентский порт должен отправлять?
  • Как я могу узнать, открыт ли порт TCP или нет?
  • Как использовать netperf для конкретного порта NIC?
  • Избавиться от ошибки «connection reject» в скрипте bash
  • Сброс TCP после SYN ACK, возможно, связанный с "no route to host"
  • 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 - лучшая ОС в мире.