Почему я могу отправить только 3 строки через netcat через порт UDP?
Я новичок в этой команде, я посылаю данные файла через порт UDP 9415. -> У меня есть файл, который имеет 1000 строк -> Я стреляю здесь IP мой IP назначения
cat test1 | netcat -u 172.x.x.x 9514
-> Теперь по назначению у меня есть syslog-ng, который получает данные и сохраняет их в папке, а после шага 2 я получаю только первые 3 записи файла.
Означает ли это, что UDP имеет некоторый лимит? Итак, я убил команду на втором шаге и повторно запустил команду, затем снова получил 3 записи и так далее.
Может кто-нибудь подсказать, в чем может быть проблема?
С уважением В.Г.
1 ответ
Несмотря на ненавистники в комментариях, UDP хорош для некоторых вещей, таких как высокопроизводительное ведение журнала.
Я бы посмотрел на размер буфера приема - если вы отправите дейтаграмму больше, чем буфер, она будет усекать дейтаграмму.
При получении сообщений по протоколу UDP увеличьте размер буфера приема UDP на хосте получателя (то есть на сервере OSE syslog-ng или ретрансляторе, получающем сообщения). Обратите внимание, что на некоторых платформах, например, в Red Hat Enterprise Linux 5, даже низкая загрузка сообщений (~200 сообщений в секунду) может привести к потере сообщений, если только параметр источника source_rcvbuf() не увеличен. В таких случаях вам потребуется увеличить параметр net.core.rmem_max хоста (например, до 1024000), но не изменять параметр net.core.rmem_default.
Как правило, увеличивайте so_rcvbuf(), чтобы размер буфера в килобайтах превышал скорость входящих сообщений в секунду. Например, чтобы получать 2000 сообщений в секунду, установите so_rcvbuf() как минимум на 2 097 152 байта.
Я также не использовал nc
для UDP, в частности, поэтому я не уверен, что он изменяет данные. Вы могли бы использовать tcpdump -xvv dst port 9514
чтобы проверить, как на самом деле отправляются дейтаграммы UDP. Как правило, я просто отправляю трубку напрямую: tail -f -n0 /var/log/nodejs/log.log > /dev/udp/serverhostnamehere/9996